home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-1 / Inter.Net 55-1.iso / CBuilder / Setup / BCB / data.z / wingdi.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-09  |  148.3 KB  |  4,058 lines

  1. /**************************************************************************
  2. *                                                                         *
  3. * wingdi.h -- GDI procedure declarations, constant definitions and macros *
  4. *                                                                         *
  5. * Copyright (c) 1985-1996, Microsoft Corp. All rights reserved.           *
  6. *                                                                         *
  7. **************************************************************************/
  8.  
  9. #ifndef _WINGDI_
  10. #define _WINGDI_
  11. #pragma option push -b
  12.  
  13. //
  14. // Define API decoration for direct importing of DLL references.
  15. //
  16.  
  17. #if !defined(_GDI32_)
  18. #define WINGDIAPI DECLSPEC_IMPORT
  19. #else
  20. #define WINGDIAPI
  21. #endif
  22.  
  23. //
  24. // Define API decoration for direct importing of DLL references.
  25. //
  26.  
  27. #if !defined(_SPOOL32_)
  28. #define WINSPOOLAPI DECLSPEC_IMPORT
  29. #else
  30. #define WINSPOOLAPI
  31. #endif
  32.  
  33. #ifdef __cplusplus
  34. extern "C" {
  35. #endif
  36.  
  37. #ifndef WINVER
  38. #define WINVER 0x0400   // version 4.0
  39. #endif /* WINVER */
  40.  
  41. #ifndef NOGDI
  42.  
  43. #ifndef NORASTEROPS
  44.  
  45. /* Binary raster ops */
  46. #define R2_BLACK            1   /*  0       */
  47. #define R2_NOTMERGEPEN      2   /* DPon     */
  48. #define R2_MASKNOTPEN       3   /* DPna     */
  49. #define R2_NOTCOPYPEN       4   /* PN       */
  50. #define R2_MASKPENNOT       5   /* PDna     */
  51. #define R2_NOT              6   /* Dn       */
  52. #define R2_XORPEN           7   /* DPx      */
  53. #define R2_NOTMASKPEN       8   /* DPan     */
  54. #define R2_MASKPEN          9   /* DPa      */
  55. #define R2_NOTXORPEN        10  /* DPxn     */
  56. #define R2_NOP              11  /* D        */
  57. #define R2_MERGENOTPEN      12  /* DPno     */
  58. #define R2_COPYPEN          13  /* P        */
  59. #define R2_MERGEPENNOT      14  /* PDno     */
  60. #define R2_MERGEPEN         15  /* DPo      */
  61. #define R2_WHITE            16  /*  1       */
  62. #define R2_LAST             16
  63.  
  64. /* Ternary raster operations */
  65. #define SRCCOPY             (DWORD)0x00CC0020 /* dest = source                   */
  66. #define SRCPAINT            (DWORD)0x00EE0086 /* dest = source OR dest           */
  67. #define SRCAND              (DWORD)0x008800C6 /* dest = source AND dest          */
  68. #define SRCINVERT           (DWORD)0x00660046 /* dest = source XOR dest          */
  69. #define SRCERASE            (DWORD)0x00440328 /* dest = source AND (NOT dest )   */
  70. #define NOTSRCCOPY          (DWORD)0x00330008 /* dest = (NOT source)             */
  71. #define NOTSRCERASE         (DWORD)0x001100A6 /* dest = (NOT src) AND (NOT dest) */
  72. #define MERGECOPY           (DWORD)0x00C000CA /* dest = (source AND pattern)     */
  73. #define MERGEPAINT          (DWORD)0x00BB0226 /* dest = (NOT source) OR dest     */
  74. #define PATCOPY             (DWORD)0x00F00021 /* dest = pattern                  */
  75. #define PATPAINT            (DWORD)0x00FB0A09 /* dest = DPSnoo                   */
  76. #define PATINVERT           (DWORD)0x005A0049 /* dest = pattern XOR dest         */
  77. #define DSTINVERT           (DWORD)0x00550009 /* dest = (NOT dest)               */
  78. #define BLACKNESS           (DWORD)0x00000042 /* dest = BLACK                    */
  79. #define WHITENESS           (DWORD)0x00FF0062 /* dest = WHITE                    */
  80.  
  81. /* Quaternary raster codes */
  82. #define MAKEROP4(fore,back) (DWORD)((((back) << 8) & 0xFF000000) | (fore))
  83.  
  84. #endif /* NORASTEROPS */
  85.  
  86. #define GDI_ERROR (0xFFFFFFFFL)
  87. #define HGDI_ERROR ((HANDLE)(0xFFFFFFFFL))
  88.  
  89. /* Region Flags */
  90. #define ERROR               0
  91. #define NULLREGION          1
  92. #define SIMPLEREGION        2
  93. #define COMPLEXREGION       3
  94. #define RGN_ERROR ERROR
  95.  
  96. /* CombineRgn() Styles */
  97. #define RGN_AND             1
  98. #define RGN_OR              2
  99. #define RGN_XOR             3
  100. #define RGN_DIFF            4
  101. #define RGN_COPY            5
  102. #define RGN_MIN             RGN_AND
  103. #define RGN_MAX             RGN_COPY
  104.  
  105. /* StretchBlt() Modes */
  106. #define BLACKONWHITE                 1
  107. #define WHITEONBLACK                 2
  108. #define COLORONCOLOR                 3
  109. #define HALFTONE                     4
  110. #define MAXSTRETCHBLTMODE            4
  111.  
  112. #if(WINVER >= 0x0400)
  113. /* New StretchBlt() Modes */
  114. #define STRETCH_ANDSCANS    BLACKONWHITE
  115. #define STRETCH_ORSCANS     WHITEONBLACK
  116. #define STRETCH_DELETESCANS COLORONCOLOR
  117. #define STRETCH_HALFTONE    HALFTONE
  118. #endif /* WINVER >= 0x0400 */
  119.  
  120. /* PolyFill() Modes */
  121. #define ALTERNATE                    1
  122. #define WINDING                      2
  123. #define POLYFILL_LAST                2
  124.  
  125. /* Text Alignment Options */
  126. #define TA_NOUPDATECP                0
  127. #define TA_UPDATECP                  1
  128.  
  129. #define TA_LEFT                      0
  130. #define TA_RIGHT                     2
  131. #define TA_CENTER                    6
  132.  
  133. #define TA_TOP                       0
  134. #define TA_BOTTOM                    8
  135. #define TA_BASELINE                  24
  136. #if (WINVER >= 0x0400)
  137. #define TA_RTLREADING                256
  138. #define TA_MASK       (TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING)
  139. #else
  140. #define TA_MASK       (TA_BASELINE+TA_CENTER+TA_UPDATECP)
  141. #endif
  142.  
  143. #define VTA_BASELINE TA_BASELINE
  144. #define VTA_LEFT     TA_BOTTOM
  145. #define VTA_RIGHT    TA_TOP
  146. #define VTA_CENTER   TA_CENTER
  147. #define VTA_BOTTOM   TA_RIGHT
  148. #define VTA_TOP      TA_LEFT
  149.  
  150. #define ETO_OPAQUE                   0x0002
  151. #define ETO_CLIPPED                  0x0004
  152. #if(WINVER >= 0x0400)
  153. #define ETO_GLYPH_INDEX              0x0010
  154. #define ETO_RTLREADING               0x0080
  155. #define ETO_IGNORELANGUAGE           0x1000
  156. #endif /* WINVER >= 0x0400 */
  157.  
  158. #define ASPECT_FILTERING             0x0001
  159.  
  160. /* Bounds Accumulation APIs */
  161.  
  162. #define DCB_RESET       0x0001
  163. #define DCB_ACCUMULATE  0x0002
  164. #define DCB_DIRTY       DCB_ACCUMULATE
  165. #define DCB_SET         (DCB_RESET | DCB_ACCUMULATE)
  166. #define DCB_ENABLE      0x0004
  167. #define DCB_DISABLE     0x0008
  168.  
  169. #ifndef NOMETAFILE
  170.  
  171. /* Metafile Functions */
  172. #define META_SETBKCOLOR              0x0201
  173. #define META_SETBKMODE               0x0102
  174. #define META_SETMAPMODE              0x0103
  175. #define META_SETROP2                 0x0104
  176. #define META_SETRELABS               0x0105
  177. #define META_SETPOLYFILLMODE         0x0106
  178. #define META_SETSTRETCHBLTMODE       0x0107
  179. #define META_SETTEXTCHAREXTRA        0x0108
  180. #define META_SETTEXTCOLOR            0x0209
  181. #define META_SETTEXTJUSTIFICATION    0x020A
  182. #define META_SETWINDOWORG            0x020B
  183. #define META_SETWINDOWEXT            0x020C
  184. #define META_SETVIEWPORTORG          0x020D
  185. #define META_SETVIEWPORTEXT          0x020E
  186. #define META_OFFSETWINDOWORG         0x020F
  187. #define META_SCALEWINDOWEXT          0x0410
  188. #define META_OFFSETVIEWPORTORG       0x0211
  189. #define META_SCALEVIEWPORTEXT        0x0412
  190. #define META_LINETO                  0x0213
  191. #define META_MOVETO                  0x0214
  192. #define META_EXCLUDECLIPRECT         0x0415
  193. #define META_INTERSECTCLIPRECT       0x0416
  194. #define META_ARC                     0x0817
  195. #define META_ELLIPSE                 0x0418
  196. #define META_FLOODFILL               0x0419
  197. #define META_PIE                     0x081A
  198. #define META_RECTANGLE               0x041B
  199. #define META_ROUNDRECT               0x061C
  200. #define META_PATBLT                  0x061D
  201. #define META_SAVEDC                  0x001E
  202. #define META_SETPIXEL                0x041F
  203. #define META_OFFSETCLIPRGN           0x0220
  204. #define META_TEXTOUT                 0x0521
  205. #define META_BITBLT                  0x0922
  206. #define META_STRETCHBLT              0x0B23
  207. #define META_POLYGON                 0x0324
  208. #define META_POLYLINE                0x0325
  209. #define META_ESCAPE                  0x0626
  210. #define META_RESTOREDC               0x0127
  211. #define META_FILLREGION              0x0228
  212. #define META_FRAMEREGION             0x0429
  213. #define META_INVERTREGION            0x012A
  214. #define META_PAINTREGION             0x012B
  215. #define META_SELECTCLIPREGION        0x012C
  216. #define META_SELECTOBJECT            0x012D
  217. #define META_SETTEXTALIGN            0x012E
  218. #define META_CHORD                   0x0830
  219. #define META_SETMAPPERFLAGS          0x0231
  220. #define META_EXTTEXTOUT              0x0a32
  221. #define META_SETDIBTODEV             0x0d33
  222. #define META_SELECTPALETTE           0x0234
  223. #define META_REALIZEPALETTE          0x0035
  224. #define META_ANIMATEPALETTE          0x0436
  225. #define META_SETPALENTRIES           0x0037
  226. #define META_POLYPOLYGON             0x0538
  227. #define META_RESIZEPALETTE           0x0139
  228. #define META_DIBBITBLT               0x0940
  229. #define META_DIBSTRETCHBLT           0x0b41
  230. #define META_DIBCREATEPATTERNBRUSH   0x0142
  231. #define META_STRETCHDIB              0x0f43
  232. #define META_EXTFLOODFILL            0x0548
  233. #define META_DELETEOBJECT            0x01f0
  234. #define META_CREATEPALETTE           0x00f7
  235. #define META_CREATEPATTERNBRUSH      0x01F9
  236. #define META_CREATEPENINDIRECT       0x02FA
  237. #define META_CREATEFONTINDIRECT      0x02FB
  238. #define META_CREATEBRUSHINDIRECT     0x02FC
  239. #define META_CREATEREGION            0x06FF
  240.  
  241. #endif /* NOMETAFILE */
  242.  
  243. /* GDI Escapes */
  244. #define NEWFRAME                     1
  245. #define ABORTDOC                     2
  246. #define NEXTBAND                     3
  247. #define SETCOLORTABLE                4
  248. #define GETCOLORTABLE                5
  249. #define FLUSHOUTPUT                  6
  250. #define DRAFTMODE                    7
  251. #define QUERYESCSUPPORT              8
  252. #define SETABORTPROC                 9
  253. #define STARTDOC                     10
  254. #define ENDDOC                       11
  255. #define GETPHYSPAGESIZE              12
  256. #define GETPRINTINGOFFSET            13
  257. #define GETSCALINGFACTOR             14
  258. #define MFCOMMENT                    15
  259. #define GETPENWIDTH                  16
  260. #define SETCOPYCOUNT                 17
  261. #define SELECTPAPERSOURCE            18
  262. #define DEVICEDATA                   19
  263. #define PASSTHROUGH                  19
  264. #define GETTECHNOLGY                 20
  265. #define GETTECHNOLOGY                20
  266. #define SETLINECAP                   21
  267. #define SETLINEJOIN                  22
  268. #define SETMITERLIMIT                23
  269. #define BANDINFO                     24
  270. #define DRAWPATTERNRECT              25
  271. #define GETVECTORPENSIZE             26
  272. #define GETVECTORBRUSHSIZE           27
  273. #define ENABLEDUPLEX                 28
  274. #define GETSETPAPERBINS              29
  275. #define GETSETPRINTORIENT            30
  276. #define ENUMPAPERBINS                31
  277. #define SETDIBSCALING                32
  278. #define EPSPRINTING                  33
  279. #define ENUMPAPERMETRICS             34
  280. #define GETSETPAPERMETRICS           35
  281. #define POSTSCRIPT_DATA              37
  282. #define POSTSCRIPT_IGNORE            38
  283. #define MOUSETRAILS                  39
  284. #define GETDEVICEUNITS               42
  285.  
  286. #define GETEXTENDEDTEXTMETRICS       256
  287. #define GETEXTENTTABLE               257
  288. #define GETPAIRKERNTABLE             258
  289. #define GETTRACKKERNTABLE            259
  290. #define EXTTEXTOUT                   512
  291. #define GETFACENAME                  513
  292. #define DOWNLOADFACE                 514
  293. #define ENABLERELATIVEWIDTHS         768
  294. #define ENABLEPAIRKERNING            769
  295. #define SETKERNTRACK                 770
  296. #define SETALLJUSTVALUES             771
  297. #define SETCHARSET                   772
  298.  
  299. #define STRETCHBLT                   2048
  300. #define GETSETSCREENPARAMS           3072
  301. #define QUERYDIBSUPPORT              3073
  302. #define BEGIN_PATH                   4096
  303. #define CLIP_TO_PATH                 4097
  304. #define END_PATH                     4098
  305. #define EXT_DEVICE_CAPS              4099
  306. #define RESTORE_CTM                  4100
  307. #define SAVE_CTM                     4101
  308. #define SET_ARC_DIRECTION            4102
  309. #define SET_BACKGROUND_COLOR         4103
  310. #define SET_POLY_MODE                4104
  311. #define SET_SCREEN_ANGLE             4105
  312. #define SET_SPREAD                   4106
  313. #define TRANSFORM_CTM                4107
  314. #define SET_CLIP_BOX                 4108
  315. #define SET_BOUNDS                   4109
  316. #define SET_MIRROR_MODE              4110
  317. #define OPENCHANNEL                  4110
  318. #define DOWNLOADHEADER               4111
  319. #define CLOSECHANNEL                 4112
  320. #define POSTSCRIPT_PASSTHROUGH       4115
  321. #define ENCAPSULATED_POSTSCRIPT      4116
  322.  
  323. /* Flag returned from QUERYDIBSUPPORT */
  324. #define QDI_SETDIBITS                1
  325. #define QDI_GETDIBITS                2
  326. #define QDI_DIBTOSCREEN              4
  327. #define QDI_STRETCHDIB               8
  328.  
  329. /* Spooler Error Codes */
  330. #define SP_NOTREPORTED               0x4000
  331. #define SP_ERROR                     (-1)
  332. #define SP_APPABORT                  (-2)
  333. #define SP_USERABORT                 (-3)
  334. #define SP_OUTOFDISK                 (-4)
  335. #define SP_OUTOFMEMORY               (-5)
  336.  
  337. #define PR_JOBSTATUS                 0x0000
  338.  
  339. /* Object Definitions for EnumObjects() */
  340. #define OBJ_PEN             1
  341. #define OBJ_BRUSH           2
  342. #define OBJ_DC              3
  343. #define OBJ_METADC          4
  344. #define OBJ_PAL             5
  345. #define OBJ_FONT            6
  346. #define OBJ_BITMAP          7
  347. #define OBJ_REGION          8
  348. #define OBJ_METAFILE        9
  349. #define OBJ_MEMDC           10
  350. #define OBJ_EXTPEN          11
  351. #define OBJ_ENHMETADC       12
  352. #define OBJ_ENHMETAFILE     13
  353.  
  354. /* xform stuff */
  355. #define MWT_IDENTITY        1
  356. #define MWT_LEFTMULTIPLY    2
  357. #define MWT_RIGHTMULTIPLY   3
  358.  
  359. #define MWT_MIN             MWT_IDENTITY
  360. #define MWT_MAX             MWT_RIGHTMULTIPLY
  361.  
  362. #define _XFORM_
  363. typedef struct  tagXFORM
  364.   {
  365.     FLOAT   eM11;
  366.     FLOAT   eM12;
  367.     FLOAT   eM21;
  368.     FLOAT   eM22;
  369.     FLOAT   eDx;
  370.     FLOAT   eDy;
  371.   } XFORM, *PXFORM, FAR *LPXFORM;
  372.  
  373. /* Bitmap Header Definition */
  374. typedef struct tagBITMAP
  375.   {
  376.     LONG        bmType;
  377.     LONG        bmWidth;
  378.     LONG        bmHeight;
  379.     LONG        bmWidthBytes;
  380.     WORD        bmPlanes;
  381.     WORD        bmBitsPixel;
  382.     LPVOID      bmBits;
  383.   } BITMAP, *PBITMAP, NEAR *NPBITMAP, FAR *LPBITMAP;
  384.  
  385. #include <pshpack1.h>
  386. typedef struct tagRGBTRIPLE {
  387.         BYTE    rgbtBlue;
  388.         BYTE    rgbtGreen;
  389.         BYTE    rgbtRed;
  390. } RGBTRIPLE;
  391. #include <poppack.h>
  392.  
  393. typedef struct tagRGBQUAD {
  394.         BYTE    rgbBlue;
  395.         BYTE    rgbGreen;
  396.         BYTE    rgbRed;
  397.         BYTE    rgbReserved;
  398. } RGBQUAD;
  399. typedef RGBQUAD FAR* LPRGBQUAD;
  400.  
  401. #if(WINVER >= 0x0400)
  402.  
  403. /* Image Color Matching color definitions */
  404.  
  405. typedef LONG   LCSCSTYPE;
  406. #define LCS_CALIBRATED_RGB              0x00000000L
  407. #define LCS_DEVICE_RGB                  0x00000001L
  408. #define LCS_DEVICE_CMYK                 0x00000002L
  409.  
  410. typedef LONG    LCSGAMUTMATCH;
  411. #define LCS_GM_BUSINESS                 0x00000001L
  412. #define LCS_GM_GRAPHICS                 0x00000002L
  413. #define LCS_GM_IMAGES                   0x00000004L
  414.  
  415. /* ICM Defines for results from CheckColorInGamut() */
  416. #define CM_OUT_OF_GAMUT         255
  417. #define CM_IN_GAMUT                     0
  418.  
  419. /* Macros to retrieve CMYK values from a COLORREF */
  420. #define GetKValue(cmyk)      ((BYTE)(cmyk))
  421. #define GetYValue(cmyk)      ((BYTE)((cmyk)>> 8))
  422. #define GetMValue(cmyk)      ((BYTE)((cmyk)>>16))
  423. #define GetCValue(cmyk)      ((BYTE)((cmyk)>>24))
  424.  
  425. #define CMYK(c,m,y,k)       ((COLORREF)((((BYTE)(k)|((WORD)((BYTE)(y))<<8))|(((DWORD)(BYTE)(m))<<16))|(((DWORD)(BYTE)(c))<<24)))
  426.  
  427. typedef long            FXPT16DOT16, FAR *LPFXPT16DOT16;
  428. typedef long            FXPT2DOT30, FAR *LPFXPT2DOT30;
  429.  
  430. /* ICM Color Definitions */
  431. // The following two structures are used for defining RGB's in terms of
  432. // CIEXYZ. The values are fixed point 16.16.
  433.  
  434. typedef struct tagCIEXYZ
  435. {
  436.         FXPT2DOT30 ciexyzX;
  437.         FXPT2DOT30 ciexyzY;
  438.         FXPT2DOT30 ciexyzZ;
  439. } CIEXYZ;
  440. typedef CIEXYZ  FAR *LPCIEXYZ;
  441.  
  442. typedef struct tagICEXYZTRIPLE
  443. {
  444.         CIEXYZ  ciexyzRed;
  445.         CIEXYZ  ciexyzGreen;
  446.         CIEXYZ  ciexyzBlue;
  447. } CIEXYZTRIPLE;
  448. typedef CIEXYZTRIPLE    FAR *LPCIEXYZTRIPLE;
  449.  
  450. // The next structures the logical color space. Unlike pens and brushes,
  451. // but like palettes, there is only one way to create a LogColorSpace.
  452. // A pointer to it must be passed, its elements can't be pushed as
  453. // arguments.
  454.  
  455. typedef struct tagLOGCOLORSPACEA {
  456.     DWORD lcsSignature;
  457.     DWORD lcsVersion;
  458.     DWORD lcsSize;
  459.     LCSCSTYPE lcsCSType;
  460.     LCSGAMUTMATCH lcsIntent;
  461.     CIEXYZTRIPLE lcsEndpoints;
  462.     DWORD lcsGammaRed;
  463.     DWORD lcsGammaGreen;
  464.     DWORD lcsGammaBlue;
  465.     CHAR   lcsFilename[MAX_PATH];
  466. } LOGCOLORSPACEA, *LPLOGCOLORSPACEA;
  467. typedef struct tagLOGCOLORSPACEW {
  468.     DWORD lcsSignature;
  469.     DWORD lcsVersion;
  470.     DWORD lcsSize;
  471.     LCSCSTYPE lcsCSType;
  472.     LCSGAMUTMATCH lcsIntent;
  473.     CIEXYZTRIPLE lcsEndpoints;
  474.     DWORD lcsGammaRed;
  475.     DWORD lcsGammaGreen;
  476.     DWORD lcsGammaBlue;
  477.     WCHAR  lcsFilename[MAX_PATH];
  478. } LOGCOLORSPACEW, *LPLOGCOLORSPACEW;
  479. #ifdef UNICODE
  480. typedef LOGCOLORSPACEW LOGCOLORSPACE;
  481. typedef LPLOGCOLORSPACEW LPLOGCOLORSPACE;
  482. #else
  483. typedef LOGCOLORSPACEA LOGCOLORSPACE;
  484. typedef LPLOGCOLORSPACEA LPLOGCOLORSPACE;
  485. #endif // UNICODE
  486.  
  487. #endif /* WINVER >= 0x0400 */
  488.  
  489.  
  490. /* structures for defining DIBs */
  491. typedef struct tagBITMAPCOREHEADER {
  492.         DWORD   bcSize;                 /* used to get to color table */
  493.         WORD    bcWidth;
  494.         WORD    bcHeight;
  495.         WORD    bcPlanes;
  496.         WORD    bcBitCount;
  497. } BITMAPCOREHEADER, FAR *LPBITMAPCOREHEADER, *PBITMAPCOREHEADER;
  498.  
  499.  
  500. typedef struct tagBITMAPINFOHEADER{
  501.         DWORD      biSize;
  502.         LONG       biWidth;
  503.         LONG       biHeight;
  504.         WORD       biPlanes;
  505.         WORD       biBitCount;
  506.         DWORD      biCompression;
  507.         DWORD      biSizeImage;
  508.         LONG       biXPelsPerMeter;
  509.         LONG       biYPelsPerMeter;
  510.         DWORD      biClrUsed;
  511.         DWORD      biClrImportant;
  512. } BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
  513.  
  514.  
  515. #if(WINVER >= 0x0400)
  516. typedef struct {
  517.         DWORD        bV4Size;
  518.         LONG         bV4Width;
  519.         LONG         bV4Height;
  520.         WORD         bV4Planes;
  521.         WORD         bV4BitCount;
  522.         DWORD        bV4V4Compression;
  523.         DWORD        bV4SizeImage;
  524.         LONG         bV4XPelsPerMeter;
  525.         LONG         bV4YPelsPerMeter;
  526.         DWORD        bV4ClrUsed;
  527.         DWORD        bV4ClrImportant;
  528.         DWORD        bV4RedMask;
  529.         DWORD        bV4GreenMask;
  530.         DWORD        bV4BlueMask;
  531.         DWORD        bV4AlphaMask;
  532.         DWORD        bV4CSType;
  533.         CIEXYZTRIPLE bV4Endpoints;
  534.         DWORD        bV4GammaRed;
  535.         DWORD        bV4GammaGreen;
  536.         DWORD        bV4GammaBlue;
  537. } BITMAPV4HEADER, FAR *LPBITMAPV4HEADER, *PBITMAPV4HEADER;
  538. #endif /* WINVER >= 0x0400 */
  539.  
  540. /* constants for the biCompression field */
  541. #define BI_RGB        0L
  542. #define BI_RLE8       1L
  543. #define BI_RLE4       2L
  544. #define BI_BITFIELDS  3L
  545.  
  546. typedef struct tagBITMAPINFO {
  547.     BITMAPINFOHEADER    bmiHeader;
  548.     RGBQUAD             bmiColors[1];
  549. } BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;
  550.  
  551. typedef struct tagBITMAPCOREINFO {
  552.     BITMAPCOREHEADER    bmciHeader;
  553.     RGBTRIPLE           bmciColors[1];
  554. } BITMAPCOREINFO, FAR *LPBITMAPCOREINFO, *PBITMAPCOREINFO;
  555.  
  556. #include <pshpack2.h>
  557. typedef struct tagBITMAPFILEHEADER {
  558.         WORD    bfType;
  559.         DWORD   bfSize;
  560.         WORD    bfReserved1;
  561.         WORD    bfReserved2;
  562.         DWORD   bfOffBits;
  563. } BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
  564. #include <poppack.h>
  565.  
  566. #define MAKEPOINTS(l)       (*((POINTS FAR *)&(l)))
  567.  
  568. #if(WINVER >= 0x0400)
  569. #ifndef NOFONTSIG
  570. typedef struct tagFONTSIGNATURE
  571. {
  572.     DWORD fsUsb[4];
  573.     DWORD fsCsb[2];
  574. } FONTSIGNATURE, *PFONTSIGNATURE,FAR *LPFONTSIGNATURE;
  575.  
  576. typedef struct tagCHARSETINFO
  577. {
  578.     UINT ciCharset;
  579.     UINT ciACP;
  580.     FONTSIGNATURE fs;
  581. } CHARSETINFO, *PCHARSETINFO, NEAR *NPCHARSETINFO, FAR *LPCHARSETINFO;
  582.  
  583. #define TCI_SRCCHARSET  1
  584. #define TCI_SRCCODEPAGE 2
  585. #define TCI_SRCFONTSIG  3
  586.  
  587. typedef struct tagLOCALESIGNATURE
  588. {
  589.     DWORD lsUsb[4];
  590.     DWORD lsCsbDefault[2];
  591.     DWORD lsCsbSupported[2];
  592. } LOCALESIGNATURE, *PLOCALESIGNATURE,FAR *LPLOCALESIGNATURE;
  593.  
  594. #endif
  595. #endif /* WINVER >= 0x0400 */
  596. #ifndef NOMETAFILE
  597.  
  598. /* Clipboard Metafile Picture Structure */
  599. typedef struct tagHANDLETABLE
  600.   {
  601.     HGDIOBJ     objectHandle[1];
  602.   } HANDLETABLE, *PHANDLETABLE, FAR *LPHANDLETABLE;
  603.  
  604. typedef struct tagMETARECORD
  605.   {
  606.     DWORD       rdSize;
  607.     WORD        rdFunction;
  608.     WORD        rdParm[1];
  609.   } METARECORD;
  610. typedef struct tagMETARECORD UNALIGNED *PMETARECORD;
  611. typedef struct tagMETARECORD UNALIGNED FAR *LPMETARECORD;
  612.  
  613. typedef struct tagMETAFILEPICT
  614.   {
  615.     LONG        mm;
  616.     LONG        xExt;
  617.     LONG        yExt;
  618.     HMETAFILE   hMF;
  619.   } METAFILEPICT, FAR *LPMETAFILEPICT;
  620.  
  621. #include <pshpack2.h>
  622. typedef struct tagMETAHEADER
  623. {
  624.     WORD        mtType;
  625.     WORD        mtHeaderSize;
  626.     WORD        mtVersion;
  627.     DWORD       mtSize;
  628.     WORD        mtNoObjects;
  629.     DWORD       mtMaxRecord;
  630.     WORD        mtNoParameters;
  631. } METAHEADER;
  632. typedef struct tagMETAHEADER UNALIGNED *PMETAHEADER;
  633. typedef struct tagMETAHEADER UNALIGNED FAR *LPMETAHEADER;
  634.  
  635. #include <poppack.h>
  636.  
  637. /* Enhanced Metafile structures */
  638. typedef struct tagENHMETARECORD
  639. {
  640.     DWORD   iType;              // Record type EMR_XXX
  641.     DWORD   nSize;              // Record size in bytes
  642.     DWORD   dParm[1];           // Parameters
  643. } ENHMETARECORD, *PENHMETARECORD, *LPENHMETARECORD;
  644.  
  645. typedef struct tagENHMETAHEADER
  646. {
  647.     DWORD   iType;              // Record type EMR_HEADER
  648.     DWORD   nSize;              // Record size in bytes.  This may be greater
  649.                                 // than the sizeof(ENHMETAHEADER).
  650.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  651.     RECTL   rclFrame;           // Inclusive-inclusive Picture Frame of metafile in .01 mm units
  652.     DWORD   dSignature;         // Signature.  Must be ENHMETA_SIGNATURE.
  653.     DWORD   nVersion;           // Version number
  654.     DWORD   nBytes;             // Size of the metafile in bytes
  655.     DWORD   nRecords;           // Number of records in the metafile
  656.     WORD    nHandles;           // Number of handles in the handle table
  657.                                 // Handle index zero is reserved.
  658.     WORD    sReserved;          // Reserved.  Must be zero.
  659.     DWORD   nDescription;       // Number of chars in the unicode description string
  660.                                 // This is 0 if there is no description string
  661.     DWORD   offDescription;     // Offset to the metafile description record.
  662.                                 // This is 0 if there is no description string
  663.     DWORD   nPalEntries;        // Number of entries in the metafile palette.
  664.     SIZEL   szlDevice;          // Size of the reference device in pels
  665.     SIZEL   szlMillimeters;     // Size of the reference device in millimeters
  666.     DWORD   cbPixelFormat;      // Size of PIXELFORMATDESCRIPTOR information
  667.                                 // This is 0 if no pixel format is set
  668.     DWORD   offPixelFormat;     // Offset to PIXELFORMATDESCRIPTOR
  669.                                 // This is 0 if no pixel format is set
  670.     DWORD   bOpenGL;            // TRUE if OpenGL commands are present in
  671.                                 // the metafile, otherwise FALSE
  672. } ENHMETAHEADER, *PENHMETAHEADER, *LPENHMETAHEADER;
  673.  
  674. #endif /* NOMETAFILE */
  675.  
  676. #ifndef NOTEXTMETRIC
  677.  
  678. /* tmPitchAndFamily flags */
  679. #define TMPF_FIXED_PITCH    0x01
  680. #define TMPF_VECTOR             0x02
  681. #define TMPF_DEVICE             0x08
  682. #define TMPF_TRUETYPE       0x04
  683.  
  684. //
  685. // BCHAR definition for APPs
  686. //
  687. #ifdef UNICODE
  688.     typedef WCHAR BCHAR;
  689. #else
  690.     typedef BYTE BCHAR;
  691. #endif
  692.  
  693.  
  694. typedef struct tagTEXTMETRICA
  695. {
  696.     LONG        tmHeight;
  697.     LONG        tmAscent;
  698.     LONG        tmDescent;
  699.     LONG        tmInternalLeading;
  700.     LONG        tmExternalLeading;
  701.     LONG        tmAveCharWidth;
  702.     LONG        tmMaxCharWidth;
  703.     LONG        tmWeight;
  704.     LONG        tmOverhang;
  705.     LONG        tmDigitizedAspectX;
  706.     LONG        tmDigitizedAspectY;
  707.     BYTE        tmFirstChar;
  708.     BYTE        tmLastChar;
  709.     BYTE        tmDefaultChar;
  710.     BYTE        tmBreakChar;
  711.     BYTE        tmItalic;
  712.     BYTE        tmUnderlined;
  713.     BYTE        tmStruckOut;
  714.     BYTE        tmPitchAndFamily;
  715.     BYTE        tmCharSet;
  716. } TEXTMETRICA, *PTEXTMETRICA, NEAR *NPTEXTMETRICA, FAR *LPTEXTMETRICA;
  717. typedef struct tagTEXTMETRICW
  718. {
  719.     LONG        tmHeight;
  720.     LONG        tmAscent;
  721.     LONG        tmDescent;
  722.     LONG        tmInternalLeading;
  723.     LONG        tmExternalLeading;
  724.     LONG        tmAveCharWidth;
  725.     LONG        tmMaxCharWidth;
  726.     LONG        tmWeight;
  727.     LONG        tmOverhang;
  728.     LONG        tmDigitizedAspectX;
  729.     LONG        tmDigitizedAspectY;
  730.     WCHAR       tmFirstChar;
  731.     WCHAR       tmLastChar;
  732.     WCHAR       tmDefaultChar;
  733.     WCHAR       tmBreakChar;
  734.     BYTE        tmItalic;
  735.     BYTE        tmUnderlined;
  736.     BYTE        tmStruckOut;
  737.     BYTE        tmPitchAndFamily;
  738.     BYTE        tmCharSet;
  739. } TEXTMETRICW, *PTEXTMETRICW, NEAR *NPTEXTMETRICW, FAR *LPTEXTMETRICW;
  740. #ifdef UNICODE
  741. typedef TEXTMETRICW TEXTMETRIC;
  742. typedef PTEXTMETRICW PTEXTMETRIC;
  743. typedef NPTEXTMETRICW NPTEXTMETRIC;
  744. typedef LPTEXTMETRICW LPTEXTMETRIC;
  745. #else
  746. typedef TEXTMETRICA TEXTMETRIC;
  747. typedef PTEXTMETRICA PTEXTMETRIC;
  748. typedef NPTEXTMETRICA NPTEXTMETRIC;
  749. typedef LPTEXTMETRICA LPTEXTMETRIC;
  750. #endif // UNICODE
  751.  
  752. /* ntmFlags field flags */
  753. #define NTM_REGULAR     0x00000040L
  754. #define NTM_BOLD        0x00000020L
  755. #define NTM_ITALIC      0x00000001L
  756.  
  757. #include <pshpack4.h>
  758. typedef struct tagNEWTEXTMETRICA
  759. {
  760.     LONG        tmHeight;
  761.     LONG        tmAscent;
  762.     LONG        tmDescent;
  763.     LONG        tmInternalLeading;
  764.     LONG        tmExternalLeading;
  765.     LONG        tmAveCharWidth;
  766.     LONG        tmMaxCharWidth;
  767.     LONG        tmWeight;
  768.     LONG        tmOverhang;
  769.     LONG        tmDigitizedAspectX;
  770.     LONG        tmDigitizedAspectY;
  771.     BYTE        tmFirstChar;
  772.     BYTE        tmLastChar;
  773.     BYTE        tmDefaultChar;
  774.     BYTE        tmBreakChar;
  775.     BYTE        tmItalic;
  776.     BYTE        tmUnderlined;
  777.     BYTE        tmStruckOut;
  778.     BYTE        tmPitchAndFamily;
  779.     BYTE        tmCharSet;
  780.     DWORD   ntmFlags;
  781.     UINT    ntmSizeEM;
  782.     UINT    ntmCellHeight;
  783.     UINT    ntmAvgWidth;
  784. } NEWTEXTMETRICA, *PNEWTEXTMETRICA, NEAR *NPNEWTEXTMETRICA, FAR *LPNEWTEXTMETRICA;
  785. typedef struct tagNEWTEXTMETRICW
  786. {
  787.     LONG        tmHeight;
  788.     LONG        tmAscent;
  789.     LONG        tmDescent;
  790.     LONG        tmInternalLeading;
  791.     LONG        tmExternalLeading;
  792.     LONG        tmAveCharWidth;
  793.     LONG        tmMaxCharWidth;
  794.     LONG        tmWeight;
  795.     LONG        tmOverhang;
  796.     LONG        tmDigitizedAspectX;
  797.     LONG        tmDigitizedAspectY;
  798.     WCHAR       tmFirstChar;
  799.     WCHAR       tmLastChar;
  800.     WCHAR       tmDefaultChar;
  801.     WCHAR       tmBreakChar;
  802.     BYTE        tmItalic;
  803.     BYTE        tmUnderlined;
  804.     BYTE        tmStruckOut;
  805.     BYTE        tmPitchAndFamily;
  806.     BYTE        tmCharSet;
  807.     DWORD   ntmFlags;
  808.     UINT    ntmSizeEM;
  809.     UINT    ntmCellHeight;
  810.     UINT    ntmAvgWidth;
  811. } NEWTEXTMETRICW, *PNEWTEXTMETRICW, NEAR *NPNEWTEXTMETRICW, FAR *LPNEWTEXTMETRICW;
  812. #ifdef UNICODE
  813. typedef NEWTEXTMETRICW NEWTEXTMETRIC;
  814. typedef PNEWTEXTMETRICW PNEWTEXTMETRIC;
  815. typedef NPNEWTEXTMETRICW NPNEWTEXTMETRIC;
  816. typedef LPNEWTEXTMETRICW LPNEWTEXTMETRIC;
  817. #else
  818. typedef NEWTEXTMETRICA NEWTEXTMETRIC;
  819. typedef PNEWTEXTMETRICA PNEWTEXTMETRIC;
  820. typedef NPNEWTEXTMETRICA NPNEWTEXTMETRIC;
  821. typedef LPNEWTEXTMETRICA LPNEWTEXTMETRIC;
  822. #endif // UNICODE
  823. #include <poppack.h>
  824.  
  825. #if(WINVER >= 0x0400)
  826. typedef struct tagNEWTEXTMETRICEXA
  827. {
  828.     NEWTEXTMETRICA  ntmTm;
  829.     FONTSIGNATURE   ntmFontSig;
  830. }NEWTEXTMETRICEXA;
  831. typedef struct tagNEWTEXTMETRICEXW
  832. {
  833.     NEWTEXTMETRICW  ntmTm;
  834.     FONTSIGNATURE   ntmFontSig;
  835. }NEWTEXTMETRICEXW;
  836. #ifdef UNICODE
  837. typedef NEWTEXTMETRICEXW NEWTEXTMETRICEX;
  838. #else
  839. typedef NEWTEXTMETRICEXA NEWTEXTMETRICEX;
  840. #endif // UNICODE
  841. #endif /* WINVER >= 0x0400 */
  842.  
  843. #endif /* NOTEXTMETRIC */
  844. /* GDI Logical Objects: */
  845.  
  846. /* Pel Array */
  847. typedef struct tagPELARRAY
  848.   {
  849.     LONG        paXCount;
  850.     LONG        paYCount;
  851.     LONG        paXExt;
  852.     LONG        paYExt;
  853.     BYTE        paRGBs;
  854.   } PELARRAY, *PPELARRAY, NEAR *NPPELARRAY, FAR *LPPELARRAY;
  855.  
  856. /* Logical Brush (or Pattern) */
  857. typedef struct tagLOGBRUSH
  858.   {
  859.     UINT        lbStyle;
  860.     COLORREF    lbColor;
  861.     LONG        lbHatch;
  862.   } LOGBRUSH, *PLOGBRUSH, NEAR *NPLOGBRUSH, FAR *LPLOGBRUSH;
  863.  
  864. typedef LOGBRUSH            PATTERN;
  865. typedef PATTERN             *PPATTERN;
  866. typedef PATTERN NEAR        *NPPATTERN;
  867. typedef PATTERN FAR         *LPPATTERN;
  868.  
  869. /* Logical Pen */
  870. typedef struct tagLOGPEN
  871.   {
  872.     UINT        lopnStyle;
  873.     POINT       lopnWidth;
  874.     COLORREF    lopnColor;
  875.   } LOGPEN, *PLOGPEN, NEAR *NPLOGPEN, FAR *LPLOGPEN;
  876.  
  877. typedef struct tagEXTLOGPEN {
  878.     DWORD       elpPenStyle;
  879.     DWORD       elpWidth;
  880.     UINT        elpBrushStyle;
  881.     COLORREF    elpColor;
  882.     LONG        elpHatch;
  883.     DWORD       elpNumEntries;
  884.     DWORD       elpStyleEntry[1];
  885. } EXTLOGPEN, *PEXTLOGPEN, NEAR *NPEXTLOGPEN, FAR *LPEXTLOGPEN;
  886.  
  887. typedef struct tagPALETTEENTRY {
  888.     BYTE        peRed;
  889.     BYTE        peGreen;
  890.     BYTE        peBlue;
  891.     BYTE        peFlags;
  892. } PALETTEENTRY, *PPALETTEENTRY, FAR *LPPALETTEENTRY;
  893.  
  894. /* Logical Palette */
  895. typedef struct tagLOGPALETTE {
  896.     WORD        palVersion;
  897.     WORD        palNumEntries;
  898.     PALETTEENTRY        palPalEntry[1];
  899. } LOGPALETTE, *PLOGPALETTE, NEAR *NPLOGPALETTE, FAR *LPLOGPALETTE;
  900.  
  901.  
  902. /* Logical Font */
  903. #define LF_FACESIZE         32
  904.  
  905. typedef struct tagLOGFONTA
  906. {
  907.     LONG      lfHeight;
  908.     LONG      lfWidth;
  909.     LONG      lfEscapement;
  910.     LONG      lfOrientation;
  911.     LONG      lfWeight;
  912.     BYTE      lfItalic;
  913.     BYTE      lfUnderline;
  914.     BYTE      lfStrikeOut;
  915.     BYTE      lfCharSet;
  916.     BYTE      lfOutPrecision;
  917.     BYTE      lfClipPrecision;
  918.     BYTE      lfQuality;
  919.     BYTE      lfPitchAndFamily;
  920.     CHAR      lfFaceName[LF_FACESIZE];
  921. } LOGFONTA, *PLOGFONTA, NEAR *NPLOGFONTA, FAR *LPLOGFONTA;
  922. typedef struct tagLOGFONTW
  923. {
  924.     LONG      lfHeight;
  925.     LONG      lfWidth;
  926.     LONG      lfEscapement;
  927.     LONG      lfOrientation;
  928.     LONG      lfWeight;
  929.     BYTE      lfItalic;
  930.     BYTE      lfUnderline;
  931.     BYTE      lfStrikeOut;
  932.     BYTE      lfCharSet;
  933.     BYTE      lfOutPrecision;
  934.     BYTE      lfClipPrecision;
  935.     BYTE      lfQuality;
  936.     BYTE      lfPitchAndFamily;
  937.     WCHAR     lfFaceName[LF_FACESIZE];
  938. } LOGFONTW, *PLOGFONTW, NEAR *NPLOGFONTW, FAR *LPLOGFONTW;
  939. #ifdef UNICODE
  940. typedef LOGFONTW LOGFONT;
  941. typedef PLOGFONTW PLOGFONT;
  942. typedef NPLOGFONTW NPLOGFONT;
  943. typedef LPLOGFONTW LPLOGFONT;
  944. #else
  945. typedef LOGFONTA LOGFONT;
  946. typedef PLOGFONTA PLOGFONT;
  947. typedef NPLOGFONTA NPLOGFONT;
  948. typedef LPLOGFONTA LPLOGFONT;
  949. #endif // UNICODE
  950.  
  951. #define LF_FULLFACESIZE     64
  952.  
  953. /* Structure passed to FONTENUMPROC */
  954. typedef struct tagENUMLOGFONTA
  955. {
  956.     LOGFONTA elfLogFont;
  957.     BYTE     elfFullName[LF_FULLFACESIZE];
  958.     BYTE     elfStyle[LF_FACESIZE];
  959. } ENUMLOGFONTA, FAR* LPENUMLOGFONTA;
  960. /* Structure passed to FONTENUMPROC */
  961. typedef struct tagENUMLOGFONTW
  962. {
  963.     LOGFONTW elfLogFont;
  964.     WCHAR    elfFullName[LF_FULLFACESIZE];
  965.     WCHAR    elfStyle[LF_FACESIZE];
  966. } ENUMLOGFONTW, FAR* LPENUMLOGFONTW;
  967. #ifdef UNICODE
  968. typedef ENUMLOGFONTW ENUMLOGFONT;
  969. typedef LPENUMLOGFONTW LPENUMLOGFONT;
  970. #else
  971. typedef ENUMLOGFONTA ENUMLOGFONT;
  972. typedef LPENUMLOGFONTA LPENUMLOGFONT;
  973. #endif // UNICODE
  974.  
  975. #if(WINVER >= 0x0400)
  976. typedef struct tagENUMLOGFONTEXA
  977. {
  978.     LOGFONTA    elfLogFont;
  979.     BYTE        elfFullName[LF_FULLFACESIZE];
  980.     BYTE        elfStyle[LF_FACESIZE];
  981.     BYTE        elfScript[LF_FACESIZE];
  982. } ENUMLOGFONTEXA, FAR *LPENUMLOGFONTEXA;
  983. typedef struct tagENUMLOGFONTEXW
  984. {
  985.     LOGFONTW    elfLogFont;
  986.     WCHAR       elfFullName[LF_FULLFACESIZE];
  987.     WCHAR       elfStyle[LF_FACESIZE];
  988.     WCHAR       elfScript[LF_FACESIZE];
  989. } ENUMLOGFONTEXW, FAR *LPENUMLOGFONTEXW;
  990. #ifdef UNICODE
  991. typedef ENUMLOGFONTEXW ENUMLOGFONTEX;
  992. typedef LPENUMLOGFONTEXW LPENUMLOGFONTEX;
  993. #else
  994. typedef ENUMLOGFONTEXA ENUMLOGFONTEX;
  995. typedef LPENUMLOGFONTEXA LPENUMLOGFONTEX;
  996. #endif // UNICODE
  997. #endif /* WINVER >= 0x0400 */
  998.  
  999. #define OUT_DEFAULT_PRECIS          0
  1000. #define OUT_STRING_PRECIS           1
  1001. #define OUT_CHARACTER_PRECIS        2
  1002. #define OUT_STROKE_PRECIS           3
  1003. #define OUT_TT_PRECIS               4
  1004. #define OUT_DEVICE_PRECIS           5
  1005. #define OUT_RASTER_PRECIS           6
  1006. #define OUT_TT_ONLY_PRECIS          7
  1007. #define OUT_OUTLINE_PRECIS          8
  1008. #define OUT_SCREEN_OUTLINE_PRECIS   9
  1009.  
  1010. #define CLIP_DEFAULT_PRECIS     0
  1011. #define CLIP_CHARACTER_PRECIS   1
  1012. #define CLIP_STROKE_PRECIS      2
  1013. #define CLIP_MASK               0xf
  1014. #define CLIP_LH_ANGLES          (1<<4)
  1015. #define CLIP_TT_ALWAYS          (2<<4)
  1016. #define CLIP_EMBEDDED           (8<<4)
  1017.  
  1018. #define DEFAULT_QUALITY         0
  1019. #define DRAFT_QUALITY           1
  1020. #define PROOF_QUALITY           2
  1021. #if(WINVER >= 0x0400)
  1022. #define NONANTIALIASED_QUALITY  3
  1023. #define ANTIALIASED_QUALITY     4
  1024. #endif /* WINVER >= 0x0400 */
  1025.  
  1026. #define DEFAULT_PITCH           0
  1027. #define FIXED_PITCH             1
  1028. #define VARIABLE_PITCH          2
  1029. #if(WINVER >= 0x0400)
  1030. #define MONO_FONT               8
  1031. #endif /* WINVER >= 0x0400 */
  1032.  
  1033. #define ANSI_CHARSET            0
  1034. #define DEFAULT_CHARSET         1
  1035. #define SYMBOL_CHARSET          2
  1036. #define SHIFTJIS_CHARSET        128
  1037. #define HANGEUL_CHARSET         129
  1038. #define GB2312_CHARSET          134
  1039. #define CHINESEBIG5_CHARSET     136
  1040. #define OEM_CHARSET             255
  1041. #if(WINVER >= 0x0400)
  1042. #define JOHAB_CHARSET           130
  1043. #define HEBREW_CHARSET          177
  1044. #define ARABIC_CHARSET          178
  1045. #define GREEK_CHARSET           161
  1046. #define TURKISH_CHARSET         162
  1047. #define VIETNAMESE_CHARSET      163
  1048. #define THAI_CHARSET            222
  1049. #define EASTEUROPE_CHARSET      238
  1050. #define RUSSIAN_CHARSET         204
  1051.  
  1052. #define MAC_CHARSET             77
  1053. #define BALTIC_CHARSET          186
  1054.  
  1055. #define FS_LATIN1               0x00000001L
  1056. #define FS_LATIN2               0x00000002L
  1057. #define FS_CYRILLIC             0x00000004L
  1058. #define FS_GREEK                0x00000008L
  1059. #define FS_TURKISH              0x00000010L
  1060. #define FS_HEBREW               0x00000020L
  1061. #define FS_ARABIC               0x00000040L
  1062. #define FS_BALTIC               0x00000080L
  1063. #define FS_VIETNAMESE           0x00000100L
  1064. #define FS_THAI                 0x00010000L
  1065. #define FS_JISJAPAN             0x00020000L
  1066. #define FS_CHINESESIMP          0x00040000L
  1067. #define FS_WANSUNG              0x00080000L
  1068. #define FS_CHINESETRAD          0x00100000L
  1069. #define FS_JOHAB                0x00200000L
  1070. #define FS_SYMBOL               0x80000000L
  1071. #endif /* WINVER >= 0x0400 */
  1072.  
  1073. /* Font Families */
  1074. #define FF_DONTCARE         (0<<4)  /* Don't care or don't know. */
  1075. #define FF_ROMAN            (1<<4)  /* Variable stroke width, serifed. */
  1076.                                     /* Times Roman, Century Schoolbook, etc. */
  1077. #define FF_SWISS            (2<<4)  /* Variable stroke width, sans-serifed. */
  1078.                                     /* Helvetica, Swiss, etc. */
  1079. #define FF_MODERN           (3<<4)  /* Constant stroke width, serifed or sans-serifed. */
  1080.                                     /* Pica, Elite, Courier, etc. */
  1081. #define FF_SCRIPT           (4<<4)  /* Cursive, etc. */
  1082. #define FF_DECORATIVE       (5<<4)  /* Old English, etc. */
  1083.  
  1084. /* Font Weights */
  1085. #define FW_DONTCARE         0
  1086. #define FW_THIN             100
  1087. #define FW_EXTRALIGHT       200
  1088. #define FW_LIGHT            300
  1089. #define FW_NORMAL           400
  1090. #define FW_MEDIUM           500
  1091. #define FW_SEMIBOLD         600
  1092. #define FW_BOLD             700
  1093. #define FW_EXTRABOLD        800
  1094. #define FW_HEAVY            900
  1095.  
  1096. #define FW_ULTRALIGHT       FW_EXTRALIGHT
  1097. #define FW_REGULAR          FW_NORMAL
  1098. #define FW_DEMIBOLD         FW_SEMIBOLD
  1099. #define FW_ULTRABOLD        FW_EXTRABOLD
  1100. #define FW_BLACK            FW_HEAVY
  1101.  
  1102. #define PANOSE_COUNT               10
  1103. #define PAN_FAMILYTYPE_INDEX        0
  1104. #define PAN_SERIFSTYLE_INDEX        1
  1105. #define PAN_WEIGHT_INDEX            2
  1106. #define PAN_PROPORTION_INDEX        3
  1107. #define PAN_CONTRAST_INDEX          4
  1108. #define PAN_STROKEVARIATION_INDEX   5
  1109. #define PAN_ARMSTYLE_INDEX          6
  1110. #define PAN_LETTERFORM_INDEX        7
  1111. #define PAN_MIDLINE_INDEX           8
  1112. #define PAN_XHEIGHT_INDEX           9
  1113.  
  1114. #define PAN_CULTURE_LATIN           0
  1115.  
  1116. typedef struct tagPANOSE
  1117. {
  1118.     BYTE    bFamilyType;
  1119.     BYTE    bSerifStyle;
  1120.     BYTE    bWeight;
  1121.     BYTE    bProportion;
  1122.     BYTE    bContrast;
  1123.     BYTE    bStrokeVariation;
  1124.     BYTE    bArmStyle;
  1125.     BYTE    bLetterform;
  1126.     BYTE    bMidline;
  1127.     BYTE    bXHeight;
  1128. } PANOSE, * LPPANOSE;
  1129.  
  1130. #define PAN_ANY                         0 /* Any                            */
  1131. #define PAN_NO_FIT                      1 /* No Fit                         */
  1132.  
  1133. #define PAN_FAMILY_TEXT_DISPLAY         2 /* Text and Display               */
  1134. #define PAN_FAMILY_SCRIPT               3 /* Script                         */
  1135. #define PAN_FAMILY_DECORATIVE           4 /* Decorative                     */
  1136. #define PAN_FAMILY_PICTORIAL            5 /* Pictorial                      */
  1137.  
  1138. #define PAN_SERIF_COVE                  2 /* Cove                           */
  1139. #define PAN_SERIF_OBTUSE_COVE           3 /* Obtuse Cove                    */
  1140. #define PAN_SERIF_SQUARE_COVE           4 /* Square Cove                    */
  1141. #define PAN_SERIF_OBTUSE_SQUARE_COVE    5 /* Obtuse Square Cove             */
  1142. #define PAN_SERIF_SQUARE                6 /* Square                         */
  1143. #define PAN_SERIF_THIN                  7 /* Thin                           */
  1144. #define PAN_SERIF_BONE                  8 /* Bone                           */
  1145. #define PAN_SERIF_EXAGGERATED           9 /* Exaggerated                    */
  1146. #define PAN_SERIF_TRIANGLE             10 /* Triangle                       */
  1147. #define PAN_SERIF_NORMAL_SANS          11 /* Normal Sans                    */
  1148. #define PAN_SERIF_OBTUSE_SANS          12 /* Obtuse Sans                    */
  1149. #define PAN_SERIF_PERP_SANS            13 /* Prep Sans                      */
  1150. #define PAN_SERIF_FLARED               14 /* Flared                         */
  1151. #define PAN_SERIF_ROUNDED              15 /* Rounded                        */
  1152.  
  1153. #define PAN_WEIGHT_VERY_LIGHT           2 /* Very Light                     */
  1154. #define PAN_WEIGHT_LIGHT                3 /* Light                          */
  1155. #define PAN_WEIGHT_THIN                 4 /* Thin                           */
  1156. #define PAN_WEIGHT_BOOK                 5 /* Book                           */
  1157. #define PAN_WEIGHT_MEDIUM               6 /* Medium                         */
  1158. #define PAN_WEIGHT_DEMI                 7 /* Demi                           */
  1159. #define PAN_WEIGHT_BOLD                 8 /* Bold                           */
  1160. #define PAN_WEIGHT_HEAVY                9 /* Heavy                          */
  1161. #define PAN_WEIGHT_BLACK               10 /* Black                          */
  1162. #define PAN_WEIGHT_NORD                11 /* Nord                           */
  1163.  
  1164. #define PAN_PROP_OLD_STYLE              2 /* Old Style                      */
  1165. #define PAN_PROP_MODERN                 3 /* Modern                         */
  1166. #define PAN_PROP_EVEN_WIDTH             4 /* Even Width                     */
  1167. #define PAN_PROP_EXPANDED               5 /* Expanded                       */
  1168. #define PAN_PROP_CONDENSED              6 /* Condensed                      */
  1169. #define PAN_PROP_VERY_EXPANDED          7 /* Very Expanded                  */
  1170. #define PAN_PROP_VERY_CONDENSED         8 /* Very Condensed                 */
  1171. #define PAN_PROP_MONOSPACED             9 /* Monospaced                     */
  1172.  
  1173. #define PAN_CONTRAST_NONE               2 /* None                           */
  1174. #define PAN_CONTRAST_VERY_LOW           3 /* Very Low                       */
  1175. #define PAN_CONTRAST_LOW                4 /* Low                            */
  1176. #define PAN_CONTRAST_MEDIUM_LOW         5 /* Medium Low                     */
  1177. #define PAN_CONTRAST_MEDIUM             6 /* Medium                         */
  1178. #define PAN_CONTRAST_MEDIUM_HIGH        7 /* Mediim High                    */
  1179. #define PAN_CONTRAST_HIGH               8 /* High                           */
  1180. #define PAN_CONTRAST_VERY_HIGH          9 /* Very High                      */
  1181.  
  1182. #define PAN_STROKE_GRADUAL_DIAG         2 /* Gradual/Diagonal               */
  1183. #define PAN_STROKE_GRADUAL_TRAN         3 /* Gradual/Transitional           */
  1184. #define PAN_STROKE_GRADUAL_VERT         4 /* Gradual/Vertical               */
  1185. #define PAN_STROKE_GRADUAL_HORZ         5 /* Gradual/Horizontal             */
  1186. #define PAN_STROKE_RAPID_VERT           6 /* Rapid/Vertical                 */
  1187. #define PAN_STROKE_RAPID_HORZ           7 /* Rapid/Horizontal               */
  1188. #define PAN_STROKE_INSTANT_VERT         8 /* Instant/Vertical               */
  1189.  
  1190. #define PAN_STRAIGHT_ARMS_HORZ          2 /* Straight Arms/Horizontal       */
  1191. #define PAN_STRAIGHT_ARMS_WEDGE         3 /* Straight Arms/Wedge            */
  1192. #define PAN_STRAIGHT_ARMS_VERT          4 /* Straight Arms/Vertical         */
  1193. #define PAN_STRAIGHT_ARMS_SINGLE_SERIF  5 /* Straight Arms/Single-Serif     */
  1194. #define PAN_STRAIGHT_ARMS_DOUBLE_SERIF  6 /* Straight Arms/Double-Serif     */
  1195. #define PAN_BENT_ARMS_HORZ              7 /* Non-Straight Arms/Horizontal   */
  1196. #define PAN_BENT_ARMS_WEDGE             8 /* Non-Straight Arms/Wedge        */
  1197. #define PAN_BENT_ARMS_VERT              9 /* Non-Straight Arms/Vertical     */
  1198. #define PAN_BENT_ARMS_SINGLE_SERIF     10 /* Non-Straight Arms/Single-Serif */
  1199. #define PAN_BENT_ARMS_DOUBLE_SERIF     11 /* Non-Straight Arms/Double-Serif */
  1200.  
  1201. #define PAN_LETT_NORMAL_CONTACT         2 /* Normal/Contact                 */
  1202. #define PAN_LETT_NORMAL_WEIGHTED        3 /* Normal/Weighted                */
  1203. #define PAN_LETT_NORMAL_BOXED           4 /* Normal/Boxed                   */
  1204. #define PAN_LETT_NORMAL_FLATTENED       5 /* Normal/Flattened               */
  1205. #define PAN_LETT_NORMAL_ROUNDED         6 /* Normal/Rounded                 */
  1206. #define PAN_LETT_NORMAL_OFF_CENTER      7 /* Normal/Off Center              */
  1207. #define PAN_LETT_NORMAL_SQUARE          8 /* Normal/Square                  */
  1208. #define PAN_LETT_OBLIQUE_CONTACT        9 /* Oblique/Contact                */
  1209. #define PAN_LETT_OBLIQUE_WEIGHTED      10 /* Oblique/Weighted               */
  1210. #define PAN_LETT_OBLIQUE_BOXED         11 /* Oblique/Boxed                  */
  1211. #define PAN_LETT_OBLIQUE_FLATTENED     12 /* Oblique/Flattened              */
  1212. #define PAN_LETT_OBLIQUE_ROUNDED       13 /* Oblique/Rounded                */
  1213. #define PAN_LETT_OBLIQUE_OFF_CENTER    14 /* Oblique/Off Center             */
  1214. #define PAN_LETT_OBLIQUE_SQUARE        15 /* Oblique/Square                 */
  1215.  
  1216. #define PAN_MIDLINE_STANDARD_TRIMMED    2 /* Standard/Trimmed               */
  1217. #define PAN_MIDLINE_STANDARD_POINTED    3 /* Standard/Pointed               */
  1218. #define PAN_MIDLINE_STANDARD_SERIFED    4 /* Standard/Serifed               */
  1219. #define PAN_MIDLINE_HIGH_TRIMMED        5 /* High/Trimmed                   */
  1220. #define PAN_MIDLINE_HIGH_POINTED        6 /* High/Pointed                   */
  1221. #define PAN_MIDLINE_HIGH_SERIFED        7 /* High/Serifed                   */
  1222. #define PAN_MIDLINE_CONSTANT_TRIMMED    8 /* Constant/Trimmed               */
  1223. #define PAN_MIDLINE_CONSTANT_POINTED    9 /* Constant/Pointed               */
  1224. #define PAN_MIDLINE_CONSTANT_SERIFED   10 /* Constant/Serifed               */
  1225. #define PAN_MIDLINE_LOW_TRIMMED        11 /* Low/Trimmed                    */
  1226. #define PAN_MIDLINE_LOW_POINTED        12 /* Low/Pointed                    */
  1227. #define PAN_MIDLINE_LOW_SERIFED        13 /* Low/Serifed                    */
  1228.  
  1229. #define PAN_XHEIGHT_CONSTANT_SMALL      2 /* Constant/Small                 */
  1230. #define PAN_XHEIGHT_CONSTANT_STD        3 /* Constant/Standard              */
  1231. #define PAN_XHEIGHT_CONSTANT_LARGE      4 /* Constant/Large                 */
  1232. #define PAN_XHEIGHT_DUCKING_SMALL       5 /* Ducking/Small                  */
  1233. #define PAN_XHEIGHT_DUCKING_STD         6 /* Ducking/Standard               */
  1234. #define PAN_XHEIGHT_DUCKING_LARGE       7 /* Ducking/Large                  */
  1235.  
  1236.  
  1237. #define ELF_VENDOR_SIZE     4
  1238.  
  1239. /* The extended logical font       */
  1240. /* An extension of the ENUMLOGFONT */
  1241.  
  1242. typedef struct tagEXTLOGFONTA {
  1243.     LOGFONTA    elfLogFont;
  1244.     BYTE        elfFullName[LF_FULLFACESIZE];
  1245.     BYTE        elfStyle[LF_FACESIZE];
  1246.     DWORD       elfVersion;     /* 0 for the first release of NT */
  1247.     DWORD       elfStyleSize;
  1248.     DWORD       elfMatch;
  1249.     DWORD       elfReserved;
  1250.     BYTE        elfVendorId[ELF_VENDOR_SIZE];
  1251.     DWORD       elfCulture;     /* 0 for Latin                   */
  1252.     PANOSE      elfPanose;
  1253. } EXTLOGFONTA, *PEXTLOGFONTA, NEAR *NPEXTLOGFONTA, FAR *LPEXTLOGFONTA;
  1254. typedef struct tagEXTLOGFONTW {
  1255.     LOGFONTW    elfLogFont;
  1256.     WCHAR       elfFullName[LF_FULLFACESIZE];
  1257.     WCHAR       elfStyle[LF_FACESIZE];
  1258.     DWORD       elfVersion;     /* 0 for the first release of NT */
  1259.     DWORD       elfStyleSize;
  1260.     DWORD       elfMatch;
  1261.     DWORD       elfReserved;
  1262.     BYTE        elfVendorId[ELF_VENDOR_SIZE];
  1263.     DWORD       elfCulture;     /* 0 for Latin                   */
  1264.     PANOSE      elfPanose;
  1265. } EXTLOGFONTW, *PEXTLOGFONTW, NEAR *NPEXTLOGFONTW, FAR *LPEXTLOGFONTW;
  1266. #ifdef UNICODE
  1267. typedef EXTLOGFONTW EXTLOGFONT;
  1268. typedef PEXTLOGFONTW PEXTLOGFONT;
  1269. typedef NPEXTLOGFONTW NPEXTLOGFONT;
  1270. typedef LPEXTLOGFONTW LPEXTLOGFONT;
  1271. #else
  1272. typedef EXTLOGFONTA EXTLOGFONT;
  1273. typedef PEXTLOGFONTA PEXTLOGFONT;
  1274. typedef NPEXTLOGFONTA NPEXTLOGFONT;
  1275. typedef LPEXTLOGFONTA LPEXTLOGFONT;
  1276. #endif // UNICODE
  1277.  
  1278.  
  1279. #define ELF_VERSION         0
  1280. #define ELF_CULTURE_LATIN   0
  1281.  
  1282. /* EnumFonts Masks */
  1283. #define RASTER_FONTTYPE     0x0001
  1284. #define DEVICE_FONTTYPE     0x002
  1285. #define TRUETYPE_FONTTYPE   0x004
  1286.  
  1287. #define RGB(r,g,b)          ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
  1288. #define PALETTERGB(r,g,b)   (0x02000000 | RGB(r,g,b))
  1289. #define PALETTEINDEX(i)     ((COLORREF)(0x01000000 | (DWORD)(WORD)(i)))
  1290.  
  1291. /* palette entry flags */
  1292.  
  1293. #define PC_RESERVED     0x01    /* palette index used for animation */
  1294. #define PC_EXPLICIT     0x02    /* palette index is explicit to device */
  1295. #define PC_NOCOLLAPSE   0x04    /* do not match color to system palette */
  1296.  
  1297. #define GetRValue(rgb)      ((BYTE)(rgb))
  1298. #define GetGValue(rgb)      ((BYTE)(((WORD)(rgb)) >> 8))
  1299. #define GetBValue(rgb)      ((BYTE)((rgb)>>16))
  1300.  
  1301. /* Background Modes */
  1302. #define TRANSPARENT         1
  1303. #define OPAQUE              2
  1304. #define BKMODE_LAST         2
  1305.  
  1306. /* Graphics Modes */
  1307.  
  1308. #define GM_COMPATIBLE       1
  1309. #define GM_ADVANCED         2
  1310. #define GM_LAST             2
  1311.  
  1312. /* PolyDraw and GetPath point types */
  1313. #define PT_CLOSEFIGURE      0x01
  1314. #define PT_LINETO           0x02
  1315. #define PT_BEZIERTO         0x04
  1316. #define PT_MOVETO           0x06
  1317.  
  1318. /* Mapping Modes */
  1319. #define MM_TEXT             1
  1320. #define MM_LOMETRIC         2
  1321. #define MM_HIMETRIC         3
  1322. #define MM_LOENGLISH        4
  1323. #define MM_HIENGLISH        5
  1324. #define MM_TWIPS            6
  1325. #define MM_ISOTROPIC        7
  1326. #define MM_ANISOTROPIC      8
  1327.  
  1328. /* Min and Max Mapping Mode values */
  1329. #define MM_MIN              MM_TEXT
  1330. #define MM_MAX              MM_ANISOTROPIC
  1331. #define MM_MAX_FIXEDSCALE   MM_TWIPS
  1332.  
  1333. /* Coordinate Modes */
  1334. #define ABSOLUTE            1
  1335. #define RELATIVE            2
  1336.  
  1337. /* Stock Logical Objects */
  1338. #define WHITE_BRUSH         0
  1339. #define LTGRAY_BRUSH        1
  1340. #define GRAY_BRUSH          2
  1341. #define DKGRAY_BRUSH        3
  1342. #define BLACK_BRUSH         4
  1343. #define NULL_BRUSH          5
  1344. #define HOLLOW_BRUSH        NULL_BRUSH
  1345. #define WHITE_PEN           6
  1346. #define BLACK_PEN           7
  1347. #define NULL_PEN            8
  1348. #define OEM_FIXED_FONT      10
  1349. #define ANSI_FIXED_FONT     11
  1350. #define ANSI_VAR_FONT       12
  1351. #define SYSTEM_FONT         13
  1352. #define DEVICE_DEFAULT_FONT 14
  1353. #define DEFAULT_PALETTE     15
  1354. #define SYSTEM_FIXED_FONT   16
  1355. #if(WINVER >= 0x0400)
  1356. #define DEFAULT_GUI_FONT    17
  1357. #endif /* WINVER >= 0x0400 */
  1358.  
  1359. #if (WINVER >= 0x0400)
  1360. #define STOCK_LAST          17
  1361. #else
  1362. #define STOCK_LAST          16
  1363. #endif
  1364.  
  1365. #define CLR_INVALID     0xFFFFFFFF
  1366.  
  1367. /* Brush Styles */
  1368. #define BS_SOLID            0
  1369. #define BS_NULL             1
  1370. #define BS_HOLLOW           BS_NULL
  1371. #define BS_HATCHED          2
  1372. #define BS_PATTERN          3
  1373. #define BS_INDEXED          4
  1374. #define BS_DIBPATTERN       5
  1375. #define BS_DIBPATTERNPT     6
  1376. #define BS_PATTERN8X8       7
  1377. #define BS_DIBPATTERN8X8    8
  1378. #define BS_MONOPATTERN      9
  1379.  
  1380. /* Hatch Styles */
  1381. #define HS_HORIZONTAL       0       /* ----- */
  1382. #define HS_VERTICAL         1       /* ||||| */
  1383. #define HS_FDIAGONAL        2       /* \\\\\ */
  1384. #define HS_BDIAGONAL        3       /* ///// */
  1385. #define HS_CROSS            4       /* +++++ */
  1386. #define HS_DIAGCROSS        5       /* xxxxx */
  1387.  
  1388. /* Pen Styles */
  1389. #define PS_SOLID            0
  1390. #define PS_DASH             1       /* -------  */
  1391. #define PS_DOT              2       /* .......  */
  1392. #define PS_DASHDOT          3       /* _._._._  */
  1393. #define PS_DASHDOTDOT       4       /* _.._.._  */
  1394. #define PS_NULL             5
  1395. #define PS_INSIDEFRAME      6
  1396. #define PS_USERSTYLE        7
  1397. #define PS_ALTERNATE        8
  1398. #define PS_STYLE_MASK       0x0000000F
  1399.  
  1400. #define PS_ENDCAP_ROUND     0x00000000
  1401. #define PS_ENDCAP_SQUARE    0x00000100
  1402. #define PS_ENDCAP_FLAT      0x00000200
  1403. #define PS_ENDCAP_MASK      0x00000F00
  1404.  
  1405. #define PS_JOIN_ROUND       0x00000000
  1406. #define PS_JOIN_BEVEL       0x00001000
  1407. #define PS_JOIN_MITER       0x00002000
  1408. #define PS_JOIN_MASK        0x0000F000
  1409.  
  1410. #define PS_COSMETIC         0x00000000
  1411. #define PS_GEOMETRIC        0x00010000
  1412. #define PS_TYPE_MASK        0x000F0000
  1413.  
  1414. #define AD_COUNTERCLOCKWISE 1
  1415. #define AD_CLOCKWISE        2
  1416.  
  1417. /* Device Parameters for GetDeviceCaps() */
  1418. #define DRIVERVERSION 0     /* Device driver version                    */
  1419. #define TECHNOLOGY    2     /* Device classification                    */
  1420. #define HORZSIZE      4     /* Horizontal size in millimeters           */
  1421. #define VERTSIZE      6     /* Vertical size in millimeters             */
  1422. #define HORZRES       8     /* Horizontal width in pixels               */
  1423. #define VERTRES       10    /* Vertical height in pixels                */
  1424. #define BITSPIXEL     12    /* Number of bits per pixel                 */
  1425. #define PLANES        14    /* Number of planes                         */
  1426. #define NUMBRUSHES    16    /* Number of brushes the device has         */
  1427. #define NUMPENS       18    /* Number of pens the device has            */
  1428. #define NUMMARKERS    20    /* Number of markers the device has         */
  1429. #define NUMFONTS      22    /* Number of fonts the device has           */
  1430. #define NUMCOLORS     24    /* Number of colors the device supports     */
  1431. #define PDEVICESIZE   26    /* Size required for device descriptor      */
  1432. #define CURVECAPS     28    /* Curve capabilities                       */
  1433. #define LINECAPS      30    /* Line capabilities                        */
  1434. #define POLYGONALCAPS 32    /* Polygonal capabilities                   */
  1435. #define TEXTCAPS      34    /* Text capabilities                        */
  1436. #define CLIPCAPS      36    /* Clipping capabilities                    */
  1437. #define RASTERCAPS    38    /* Bitblt capabilities                      */
  1438. #define ASPECTX       40    /* Length of the X leg                      */
  1439. #define ASPECTY       42    /* Length of the Y leg                      */
  1440. #define ASPECTXY      44    /* Length of the hypotenuse                 */
  1441.  
  1442. #define LOGPIXELSX    88    /* Logical pixels/inch in X                 */
  1443. #define LOGPIXELSY    90    /* Logical pixels/inch in Y                 */
  1444.  
  1445. #define SIZEPALETTE  104    /* Number of entries in physical palette    */
  1446. #define NUMRESERVED  106    /* Number of reserved entries in palette    */
  1447. #define COLORRES     108    /* Actual color resolution                  */
  1448.  
  1449.  
  1450. // Printing related DeviceCaps. These replace the appropriate Escapes
  1451.  
  1452. #define PHYSICALWIDTH   110 /* Physical Width in device units           */
  1453. #define PHYSICALHEIGHT  111 /* Physical Height in device units          */
  1454. #define PHYSICALOFFSETX 112 /* Physical Printable Area x margin         */
  1455. #define PHYSICALOFFSETY 113 /* Physical Printable Area y margin         */
  1456. #define SCALINGFACTORX  114 /* Scaling factor x                         */
  1457. #define SCALINGFACTORY  115 /* Scaling factor y                         */
  1458.  
  1459. // Display driver specific
  1460.  
  1461. #define VREFRESH        116  /* Current vertical refresh rate of the    */
  1462.                              /* display device (for displays only) in Hz*/
  1463. #define DESKTOPVERTRES  117  /* Horizontal width of entire desktop in   */
  1464.                              /* pixels                                  */
  1465. #define DESKTOPHORZRES  118  /* Vertical height of entire desktop in    */
  1466.                              /* pixels                                  */
  1467. #define BLTALIGNMENT    119  /* Preferred blt alignment                 */
  1468.  
  1469. #ifndef NOGDICAPMASKS
  1470.  
  1471. /* Device Capability Masks: */
  1472.  
  1473. /* Device Technologies */
  1474. #define DT_PLOTTER          0   /* Vector plotter                   */
  1475. #define DT_RASDISPLAY       1   /* Raster display                   */
  1476. #define DT_RASPRINTER       2   /* Raster printer                   */
  1477. #define DT_RASCAMERA        3   /* Raster camera                    */
  1478. #define DT_CHARSTREAM       4   /* Character-stream, PLP            */
  1479. #define DT_METAFILE         5   /* Metafile, VDM                    */
  1480. #define DT_DISPFILE         6   /* Display-file                     */
  1481.  
  1482. /* Curve Capabilities */
  1483. #define CC_NONE             0   /* Curves not supported             */
  1484. #define CC_CIRCLES          1   /* Can do circles                   */
  1485. #define CC_PIE              2   /* Can do pie wedges                */
  1486. #define CC_CHORD            4   /* Can do chord arcs                */
  1487. #define CC_ELLIPSES         8   /* Can do ellipese                  */
  1488. #define CC_WIDE             16  /* Can do wide lines                */
  1489. #define CC_STYLED           32  /* Can do styled lines              */
  1490. #define CC_WIDESTYLED       64  /* Can do wide styled lines         */
  1491. #define CC_INTERIORS        128 /* Can do interiors                 */
  1492. #define CC_ROUNDRECT        256 /*                                  */
  1493.  
  1494. /* Line Capabilities */
  1495. #define LC_NONE             0   /* Lines not supported              */
  1496. #define LC_POLYLINE         2   /* Can do polylines                 */
  1497. #define LC_MARKER           4   /* Can do markers                   */
  1498. #define LC_POLYMARKER       8   /* Can do polymarkers               */
  1499. #define LC_WIDE             16  /* Can do wide lines                */
  1500. #define LC_STYLED           32  /* Can do styled lines              */
  1501. #define LC_WIDESTYLED       64  /* Can do wide styled lines         */
  1502. #define LC_INTERIORS        128 /* Can do interiors                 */
  1503.  
  1504. /* Polygonal Capabilities */
  1505. #define PC_NONE             0   /* Polygonals not supported         */
  1506. #define PC_POLYGON          1   /* Can do polygons                  */
  1507. #define PC_RECTANGLE        2   /* Can do rectangles                */
  1508. #define PC_WINDPOLYGON      4   /* Can do winding polygons          */
  1509. #define PC_TRAPEZOID        4   /* Can do trapezoids                */
  1510. #define PC_SCANLINE         8   /* Can do scanlines                 */
  1511. #define PC_WIDE             16  /* Can do wide borders              */
  1512. #define PC_STYLED           32  /* Can do styled borders            */
  1513. #define PC_WIDESTYLED       64  /* Can do wide styled borders       */
  1514. #define PC_INTERIORS        128 /* Can do interiors                 */
  1515. #define PC_POLYPOLYGON      256 /* Can do polypolygons              */
  1516. #define PC_PATHS            512 /* Can do paths                     */
  1517.  
  1518. /* Clipping Capabilities */
  1519. #define CP_NONE             0   /* No clipping of output            */
  1520. #define CP_RECTANGLE        1   /* Output clipped to rects          */
  1521. #define CP_REGION           2   /* obsolete                         */
  1522.  
  1523. /* Text Capabilities */
  1524. #define TC_OP_CHARACTER     0x00000001  /* Can do OutputPrecision   CHARACTER      */
  1525. #define TC_OP_STROKE        0x00000002  /* Can do OutputPrecision   STROKE         */
  1526. #define TC_CP_STROKE        0x00000004  /* Can do ClipPrecision     STROKE         */
  1527. #define TC_CR_90            0x00000008  /* Can do CharRotAbility    90             */
  1528. #define TC_CR_ANY           0x00000010  /* Can do CharRotAbility    ANY            */
  1529. #define TC_SF_X_YINDEP      0x00000020  /* Can do ScaleFreedom      X_YINDEPENDENT */
  1530. #define TC_SA_DOUBLE        0x00000040  /* Can do ScaleAbility      DOUBLE         */
  1531. #define TC_SA_INTEGER       0x00000080  /* Can do ScaleAbility      INTEGER        */
  1532. #define TC_SA_CONTIN        0x00000100  /* Can do ScaleAbility      CONTINUOUS     */
  1533. #define TC_EA_DOUBLE        0x00000200  /* Can do EmboldenAbility   DOUBLE         */
  1534. #define TC_IA_ABLE          0x00000400  /* Can do ItalisizeAbility  ABLE           */
  1535. #define TC_UA_ABLE          0x00000800  /* Can do UnderlineAbility  ABLE           */
  1536. #define TC_SO_ABLE          0x00001000  /* Can do StrikeOutAbility  ABLE           */
  1537. #define TC_RA_ABLE          0x00002000  /* Can do RasterFontAble    ABLE           */
  1538. #define TC_VA_ABLE          0x00004000  /* Can do VectorFontAble    ABLE           */
  1539. #define TC_RESERVED         0x00008000
  1540. #define TC_SCROLLBLT        0x00010000  /* Don't do text scroll with blt           */
  1541.  
  1542. #endif /* NOGDICAPMASKS */
  1543.  
  1544. /* Raster Capabilities */
  1545. #define RC_NONE
  1546. #define RC_BITBLT           1       /* Can do standard BLT.             */
  1547. #define RC_BANDING          2       /* Device requires banding support  */
  1548. #define RC_SCALING          4       /* Device requires scaling support  */
  1549. #define RC_BITMAP64         8       /* Device can support >64K bitmap   */
  1550. #define RC_GDI20_OUTPUT     0x0010      /* has 2.0 output calls         */
  1551. #define RC_GDI20_STATE      0x0020
  1552. #define RC_SAVEBITMAP       0x0040
  1553. #define RC_DI_BITMAP        0x0080      /* supports DIB to memory       */
  1554. #define RC_PALETTE          0x0100      /* supports a palette           */
  1555. #define RC_DIBTODEV         0x0200      /* supports DIBitsToDevice      */
  1556. #define RC_BIGFONT          0x0400      /* supports >64K fonts          */
  1557. #define RC_STRETCHBLT       0x0800      /* supports StretchBlt          */
  1558. #define RC_FLOODFILL        0x1000      /* supports FloodFill           */
  1559. #define RC_STRETCHDIB       0x2000      /* supports StretchDIBits       */
  1560. #define RC_OP_DX_OUTPUT     0x4000
  1561. #define RC_DEVBITS          0x8000
  1562.  
  1563.  
  1564. /* DIB color table identifiers */
  1565.  
  1566. #define DIB_RGB_COLORS      0 /* color table in RGBs */
  1567. #define DIB_PAL_COLORS      1 /* color table in palette indices */
  1568.  
  1569. /* constants for Get/SetSystemPaletteUse() */
  1570.  
  1571. #define SYSPAL_ERROR    0
  1572. #define SYSPAL_STATIC   1
  1573. #define SYSPAL_NOSTATIC 2
  1574.  
  1575. /* constants for CreateDIBitmap */
  1576. #define CBM_INIT        0x04L   /* initialize bitmap */
  1577.  
  1578. /* ExtFloodFill style flags */
  1579. #define  FLOODFILLBORDER   0
  1580. #define  FLOODFILLSURFACE  1
  1581.  
  1582. /* size of a device name string */
  1583. #define CCHDEVICENAME 32
  1584.  
  1585. /* size of a form name string */
  1586. #define CCHFORMNAME 32
  1587.  
  1588. typedef struct _devicemodeA {
  1589.     BYTE   dmDeviceName[CCHDEVICENAME];
  1590.     WORD dmSpecVersion;
  1591.     WORD dmDriverVersion;
  1592.     WORD dmSize;
  1593.     WORD dmDriverExtra;
  1594.     DWORD dmFields;
  1595.     short dmOrientation;
  1596.     short dmPaperSize;
  1597.     short dmPaperLength;
  1598.     short dmPaperWidth;
  1599.     short dmScale;
  1600.     short dmCopies;
  1601.     short dmDefaultSource;
  1602.     short dmPrintQuality;
  1603.     short dmColor;
  1604.     short dmDuplex;
  1605.     short dmYResolution;
  1606.     short dmTTOption;
  1607.     short dmCollate;
  1608.     BYTE   dmFormName[CCHFORMNAME];
  1609.     WORD   dmLogPixels;
  1610.     DWORD  dmBitsPerPel;
  1611.     DWORD  dmPelsWidth;
  1612.     DWORD  dmPelsHeight;
  1613.     DWORD  dmDisplayFlags;
  1614.     DWORD  dmDisplayFrequency;
  1615.     DWORD  dmICMMethod;
  1616.     DWORD  dmICMIntent;
  1617.     DWORD  dmMediaType;
  1618.     DWORD  dmDitherType;
  1619.     DWORD  dmICCManufacturer;
  1620.     DWORD  dmICCModel;
  1621.     DWORD  dmPanningWidth;
  1622.     DWORD  dmPanningHeight;
  1623. } DEVMODEA, *PDEVMODEA, *NPDEVMODEA, *LPDEVMODEA;
  1624. typedef struct _devicemodeW {
  1625.     WCHAR  dmDeviceName[CCHDEVICENAME];
  1626.     WORD dmSpecVersion;
  1627.     WORD dmDriverVersion;
  1628.     WORD dmSize;
  1629.     WORD dmDriverExtra;
  1630.     DWORD dmFields;
  1631.     short dmOrientation;
  1632.     short dmPaperSize;
  1633.     short dmPaperLength;
  1634.     short dmPaperWidth;
  1635.     short dmScale;
  1636.     short dmCopies;
  1637.     short dmDefaultSource;
  1638.     short dmPrintQuality;
  1639.     short dmColor;
  1640.     short dmDuplex;
  1641.     short dmYResolution;
  1642.     short dmTTOption;
  1643.     short dmCollate;
  1644.     WCHAR  dmFormName[CCHFORMNAME];
  1645.     WORD   dmLogPixels;
  1646.     DWORD  dmBitsPerPel;
  1647.     DWORD  dmPelsWidth;
  1648.     DWORD  dmPelsHeight;
  1649.     DWORD  dmDisplayFlags;
  1650.     DWORD  dmDisplayFrequency;
  1651.     DWORD  dmICMMethod;
  1652.     DWORD  dmICMIntent;
  1653.     DWORD  dmMediaType;
  1654.     DWORD  dmDitherType;
  1655.     DWORD  dmICCManufacturer;
  1656.     DWORD  dmICCModel;
  1657.     DWORD  dmPanningWidth;
  1658.     DWORD  dmPanningHeight;
  1659. } DEVMODEW, *PDEVMODEW, *NPDEVMODEW, *LPDEVMODEW;
  1660. #ifdef UNICODE
  1661. typedef DEVMODEW DEVMODE;
  1662. typedef PDEVMODEW PDEVMODE;
  1663. typedef NPDEVMODEW NPDEVMODE;
  1664. typedef LPDEVMODEW LPDEVMODE;
  1665. #else
  1666. typedef DEVMODEA DEVMODE;
  1667. typedef PDEVMODEA PDEVMODE;
  1668. typedef NPDEVMODEA NPDEVMODE;
  1669. typedef LPDEVMODEA LPDEVMODE;
  1670. #endif // UNICODE
  1671.  
  1672. #define DM_SPECVERSION 0x0401
  1673.  
  1674. /* field selection bits */
  1675. #define DM_ORIENTATION      0x00000001L
  1676. #define DM_PAPERSIZE        0x00000002L
  1677. #define DM_PAPERLENGTH      0x00000004L
  1678. #define DM_PAPERWIDTH       0x00000008L
  1679. #define DM_SCALE            0x00000010L
  1680. #define DM_COPIES           0x00000100L
  1681. #define DM_DEFAULTSOURCE    0x00000200L
  1682. #define DM_PRINTQUALITY     0x00000400L
  1683. #define DM_COLOR            0x00000800L
  1684. #define DM_DUPLEX           0x00001000L
  1685. #define DM_YRESOLUTION      0x00002000L
  1686. #define DM_TTOPTION         0x00004000L
  1687. #define DM_COLLATE          0x00008000L
  1688. #define DM_FORMNAME         0x00010000L
  1689. #define DM_LOGPIXELS        0x00020000L
  1690. #define DM_BITSPERPEL       0x00040000L
  1691. #define DM_PELSWIDTH        0x00080000L
  1692. #define DM_PELSHEIGHT       0x00100000L
  1693. #define DM_DISPLAYFLAGS     0x00200000L
  1694. #define DM_DISPLAYFREQUENCY 0x00400000L
  1695. #define DM_PANNINGWIDTH     0x00800000L
  1696. #define DM_PANNINGHEIGHT    0x01000000L
  1697. #define DM_ICMMETHOD        0x02000000L
  1698. #define DM_ICMINTENT        0x04000000L
  1699. #define DM_MEDIATYPE        0x08000000L
  1700. #define DM_DITHERTYPE       0x10000000L
  1701. #define DM_ICCMANUFACTURER  0x20000000L
  1702. #define DM_ICCMODEL         0x40000000L
  1703.  
  1704. /* orientation selections */
  1705. #define DMORIENT_PORTRAIT   1
  1706. #define DMORIENT_LANDSCAPE  2
  1707.  
  1708. /* paper selections */
  1709. #define DMPAPER_FIRST                DMPAPER_LETTER
  1710. #define DMPAPER_LETTER               1  /* Letter 8 1/2 x 11 in               */
  1711. #define DMPAPER_LETTERSMALL          2  /* Letter Small 8 1/2 x 11 in         */
  1712. #define DMPAPER_TABLOID              3  /* Tabloid 11 x 17 in                 */
  1713. #define DMPAPER_LEDGER               4  /* Ledger 17 x 11 in                  */
  1714. #define DMPAPER_LEGAL                5  /* Legal 8 1/2 x 14 in                */
  1715. #define DMPAPER_STATEMENT            6  /* Statement 5 1/2 x 8 1/2 in         */
  1716. #define DMPAPER_EXECUTIVE            7  /* Executive 7 1/4 x 10 1/2 in        */
  1717. #define DMPAPER_A3                   8  /* A3 297 x 420 mm                    */
  1718. #define DMPAPER_A4                   9  /* A4 210 x 297 mm                    */
  1719. #define DMPAPER_A4SMALL             10  /* A4 Small 210 x 297 mm              */
  1720. #define DMPAPER_A5                  11  /* A5 148 x 210 mm                    */
  1721. #define DMPAPER_B4                  12  /* B4 (JIS) 250 x 354                 */
  1722. #define DMPAPER_B5                  13  /* B5 (JIS) 182 x 257 mm              */
  1723. #define DMPAPER_FOLIO               14  /* Folio 8 1/2 x 13 in                */
  1724. #define DMPAPER_QUARTO              15  /* Quarto 215 x 275 mm                */
  1725. #define DMPAPER_10X14               16  /* 10x14 in                           */
  1726. #define DMPAPER_11X17               17  /* 11x17 in                           */
  1727. #define DMPAPER_NOTE                18  /* Note 8 1/2 x 11 in                 */
  1728. #define DMPAPER_ENV_9               19  /* Envelope #9 3 7/8 x 8 7/8          */
  1729. #define DMPAPER_ENV_10              20  /* Envelope #10 4 1/8 x 9 1/2         */
  1730. #define DMPAPER_ENV_11              21  /* Envelope #11 4 1/2 x 10 3/8        */
  1731. #define DMPAPER_ENV_12              22  /* Envelope #12 4 \276 x 11           */
  1732. #define DMPAPER_ENV_14              23  /* Envelope #14 5 x 11 1/2            */
  1733. #define DMPAPER_CSHEET              24  /* C size sheet                       */
  1734. #define DMPAPER_DSHEET              25  /* D size sheet                       */
  1735. #define DMPAPER_ESHEET              26  /* E size sheet                       */
  1736. #define DMPAPER_ENV_DL              27  /* Envelope DL 110 x 220mm            */
  1737. #define DMPAPER_ENV_C5              28  /* Envelope C5 162 x 229 mm           */
  1738. #define DMPAPER_ENV_C3              29  /* Envelope C3  324 x 458 mm          */
  1739. #define DMPAPER_ENV_C4              30  /* Envelope C4  229 x 324 mm          */
  1740. #define DMPAPER_ENV_C6              31  /* Envelope C6  114 x 162 mm          */
  1741. #define DMPAPER_ENV_C65             32  /* Envelope C65 114 x 229 mm          */
  1742. #define DMPAPER_ENV_B4              33  /* Envelope B4  250 x 353 mm          */
  1743. #define DMPAPER_ENV_B5              34  /* Envelope B5  176 x 250 mm          */
  1744. #define DMPAPER_ENV_B6              35  /* Envelope B6  176 x 125 mm          */
  1745. #define DMPAPER_ENV_ITALY           36  /* Envelope 110 x 230 mm              */
  1746. #define DMPAPER_ENV_MONARCH         37  /* Envelope Monarch 3.875 x 7.5 in    */
  1747. #define DMPAPER_ENV_PERSONAL        38  /* 6 3/4 Envelope 3 5/8 x 6 1/2 in    */
  1748. #define DMPAPER_FANFOLD_US          39  /* US Std Fanfold 14 7/8 x 11 in      */
  1749. #define DMPAPER_FANFOLD_STD_GERMAN  40  /* German Std Fanfold 8 1/2 x 12 in   */
  1750. #define DMPAPER_FANFOLD_LGL_GERMAN  41  /* German Legal Fanfold 8 1/2 x 13 in */
  1751. #if(WINVER >= 0x0400)
  1752. #define DMPAPER_ISO_B4              42  /* B4 (ISO) 250 x 353 mm              */
  1753. #define DMPAPER_JAPANESE_POSTCARD   43  /* Japanese Postcard 100 x 148 mm     */
  1754. #define DMPAPER_9X11                44  /* 9 x 11 in                          */
  1755. #define DMPAPER_10X11               45  /* 10 x 11 in                         */
  1756. #define DMPAPER_15X11               46  /* 15 x 11 in                         */
  1757. #define DMPAPER_ENV_INVITE          47  /* Envelope Invite 220 x 220 mm       */
  1758. #define DMPAPER_RESERVED_48         48  /* RESERVED--DO NOT USE               */
  1759. #define DMPAPER_RESERVED_49         49  /* RESERVED--DO NOT USE               */
  1760. #define DMPAPER_LETTER_EXTRA        50  /* Letter Extra 9 \275 x 12 in        */
  1761. #define DMPAPER_LEGAL_EXTRA         51  /* Legal Extra 9 \275 x 15 in         */
  1762. #define DMPAPER_TABLOID_EXTRA       52  /* Tabloid Extra 11.69 x 18 in        */
  1763. #define DMPAPER_A4_EXTRA            53  /* A4 Extra 9.27 x 12.69 in           */
  1764. #define DMPAPER_LETTER_TRANSVERSE   54  /* Letter Transverse 8 \275 x 11 in   */
  1765. #define DMPAPER_A4_TRANSVERSE       55  /* A4 Transverse 210 x 297 mm         */
  1766. #define DMPAPER_LETTER_EXTRA_TRANSVERSE 56 /* Letter Extra Transverse 9\275 x 12 in */
  1767. #define DMPAPER_A_PLUS              57  /* SuperA/SuperA/A4 227 x 356 mm      */
  1768. #define DMPAPER_B_PLUS              58  /* SuperB/SuperB/A3 305 x 487 mm      */
  1769. #define DMPAPER_LETTER_PLUS         59  /* Letter Plus 8.5 x 12.69 in         */
  1770. #define DMPAPER_A4_PLUS             60  /* A4 Plus 210 x 330 mm               */
  1771. #define DMPAPER_A5_TRANSVERSE       61  /* A5 Transverse 148 x 210 mm         */
  1772. #define DMPAPER_B5_TRANSVERSE       62  /* B5 (JIS) Transverse 182 x 257 mm   */
  1773. #define DMPAPER_A3_EXTRA            63  /* A3 Extra 322 x 445 mm              */
  1774. #define DMPAPER_A5_EXTRA            64  /* A5 Extra 174 x 235 mm              */
  1775. #define DMPAPER_B5_EXTRA            65  /* B5 (ISO) Extra 201 x 276 mm        */
  1776. #define DMPAPER_A2                  66  /* A2 420 x 594 mm                    */
  1777. #define DMPAPER_A3_TRANSVERSE       67  /* A3 Transverse 297 x 420 mm         */
  1778. #define DMPAPER_A3_EXTRA_TRANSVERSE 68  /* A3 Extra Transverse 322 x 445 mm   */
  1779. /*
  1780. ** the following sizes are reserved for the Far East version of Win95.
  1781. ** Rotated papers rotate the physical page but not the logical page.
  1782. */
  1783. #define DMPAPER_DBL_JAPANESE_POSTCARD 69 /* Japanese Double Postcard 200 x 148 mm */
  1784. #define DMPAPER_A6                  70  /* A6 105 x 148 mm                 */
  1785. #define DMPAPER_JENV_KAKU2          71  /* Japanese Envelope Kaku #2       */
  1786. #define DMPAPER_JENV_KAKU3          72  /* Japanese Envelope Kaku #3       */
  1787. #define DMPAPER_JENV_CHOU3          73  /* Japanese Envelope Chou #3       */
  1788. #define DMPAPER_JENV_CHOU4          74  /* Japanese Envelope Chou #4       */
  1789. #define DMPAPER_LETTER_ROTATED      75  /* Letter Rotated 11 x 8 1/2 11 in */
  1790. #define DMPAPER_A3_ROTATED          76  /* A3 Rotated 420 x 297 mm         */
  1791. #define DMPAPER_A4_ROTATED          77  /* A4 Rotated 297 x 210 mm         */
  1792. #define DMPAPER_A5_ROTATED          78  /* A5 Rotated 210 x 148 mm         */
  1793. #define DMPAPER_B4_JIS_ROTATED      79  /* B4 (JIS) Rotated 364 x 257 mm   */
  1794. #define DMPAPER_B5_JIS_ROTATED      80  /* B5 (JIS) Rotated 257 x 182 mm   */
  1795. #define DMPAPER_JAPANESE_POSTCARD_ROTATED 81 /* Japanese Postcard Rotated 148 x 100 mm */
  1796. #define DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED 82 /* Double Japanese Postcard Rotated 148 x 200 mm */
  1797. #define DMPAPER_A6_ROTATED          83  /* A6 Rotated 148 x 105 mm         */
  1798. #define DMPAPER_JENV_KAKU2_ROTATED  84  /* Japanese Envelope Kaku #2 Rotated*/
  1799. #define DMPAPER_JENV_KAKU3_ROTATED  85  /* Japanese Envelope Kaku #3 Rotated*/
  1800. #define DMPAPER_JENV_CHOU3_ROTATED  86  /* Japanese Envelope Chou #3 Rotated*/
  1801. #define DMPAPER_JENV_CHOU4_ROTATED  87  /* Japanese Envelope Chou #4 Rotated*/
  1802. #define DMPAPER_B6_JIS              88  /* B6 (JIS) 128 x 182 mm           */
  1803. #define DMPAPER_B6_JIS_ROTATED      89  /* B6 (JIS) Rotated 182 x 128 mm   */
  1804. #define DMPAPER_12X11               90  /* 12 x 11 in                      */
  1805. #define DMPAPER_JENV_YOU4           91  /* Japanese Envelope You #4        */
  1806. #define DMPAPER_JENV_YOU4_ROTATED   92  /* Japanese Envelope You #4 Rotated*/
  1807. #define DMPAPER_P16K                93  /* PRC 16K 146 x 215 mm            */
  1808. #define DMPAPER_P32K                94  /* PRC 32K 97 x 151 mm             */
  1809. #define DMPAPER_P32KBIG             95  /* PRC 32K(Big) 97 x 151 mm        */
  1810. #define DMPAPER_PENV_1              96  /* PRC Envelope #1 102 x 165 mm    */
  1811. #define DMPAPER_PENV_2              97  /* PRC Envelope #2 102 x 176 mm    */
  1812. #define DMPAPER_PENV_3              98  /* PRC Envelope #3 125 x 176 mm    */
  1813. #define DMPAPER_PENV_4              99  /* PRC Envelope #4 110 x 208 mm    */
  1814. #define DMPAPER_PENV_5              100 /* PRC Envelope #5 110 x 220 mm    */
  1815. #define DMPAPER_PENV_6              101 /* PRC Envelope #6 120 x 230 mm    */
  1816. #define DMPAPER_PENV_7              102 /* PRC Envelope #7 160 x 230 mm    */
  1817. #define DMPAPER_PENV_8              103 /* PRC Envelope #8 120 x 309 mm    */
  1818. #define DMPAPER_PENV_9              104 /* PRC Envelope #9 229 x 324 mm    */
  1819. #define DMPAPER_PENV_10             105 /* PRC Envelope #10 324 x 458 mm   */
  1820. #define DMPAPER_P16K_ROTATED        106 /* PRC 16K Rotated                 */
  1821. #define DMPAPER_P32K_ROTATED        107 /* PRC 32K Rotated                 */
  1822. #define DMPAPER_P32KBIG_ROTATED     108 /* PRC 32K(Big) Rotated            */
  1823. #define DMPAPER_PENV_1_ROTATED      109 /* PRC Envelope #1 Rotated 165 x 102 mm*/
  1824. #define DMPAPER_PENV_2_ROTATED      110 /* PRC Envelope #2 Rotated 176 x 102 mm*/
  1825. #define DMPAPER_PENV_3_ROTATED      111 /* PRC Envelope #3 Rotated 176 x 125 mm*/
  1826. #define DMPAPER_PENV_4_ROTATED      112 /* PRC Envelope #4 Rotated 208 x 110 mm*/
  1827. #define DMPAPER_PENV_5_ROTATED      113 /* PRC Envelope #5 Rotated 220 x 110 mm*/
  1828. #define DMPAPER_PENV_6_ROTATED      114 /* PRC Envelope #6 Rotated 230 x 120 mm*/
  1829. #define DMPAPER_PENV_7_ROTATED      115 /* PRC Envelope #7 Rotated 230 x 160 mm*/
  1830. #define DMPAPER_PENV_8_ROTATED      116 /* PRC Envelope #8 Rotated 309 x 120 mm*/
  1831. #define DMPAPER_PENV_9_ROTATED      117 /* PRC Envelope #9 Rotated 324 x 229 mm*/
  1832. #define DMPAPER_PENV_10_ROTATED     118 /* PRC Envelope #10 Rotated 458 x 324 mm */
  1833. #endif /* WINVER >= 0x0400 */
  1834.  
  1835. #if (WINVER >= 0x0400)
  1836. #define DMPAPER_LAST                DMPAPER_PENV_10_ROTATED
  1837. #else
  1838. #define DMPAPER_LAST                DMPAPER_FANFOLD_LGL_GERMAN
  1839. #endif
  1840.  
  1841. #define DMPAPER_USER                256
  1842.  
  1843. /* bin selections */
  1844. #define DMBIN_FIRST         DMBIN_UPPER
  1845. #define DMBIN_UPPER         1
  1846. #define DMBIN_ONLYONE       1
  1847. #define DMBIN_LOWER         2
  1848. #define DMBIN_MIDDLE        3
  1849. #define DMBIN_MANUAL        4
  1850. #define DMBIN_ENVELOPE      5
  1851. #define DMBIN_ENVMANUAL     6
  1852. #define DMBIN_AUTO          7
  1853. #define DMBIN_TRACTOR       8
  1854. #define DMBIN_SMALLFMT      9
  1855. #define DMBIN_LARGEFMT      10
  1856. #define DMBIN_LARGECAPACITY 11
  1857. #define DMBIN_CASSETTE      14
  1858. #define DMBIN_FORMSOURCE    15
  1859. #define DMBIN_LAST          DMBIN_FORMSOURCE
  1860.  
  1861. #define DMBIN_USER          256     /* device specific bins start here */
  1862.  
  1863. /* print qualities */
  1864. #define DMRES_DRAFT         (-1)
  1865. #define DMRES_LOW           (-2)
  1866. #define DMRES_MEDIUM        (-3)
  1867. #define DMRES_HIGH          (-4)
  1868.  
  1869. /* color enable/disable for color printers */
  1870. #define DMCOLOR_MONOCHROME  1
  1871. #define DMCOLOR_COLOR       2
  1872.  
  1873. /* duplex enable */
  1874. #define DMDUP_SIMPLEX    1
  1875. #define DMDUP_VERTICAL   2
  1876. #define DMDUP_HORIZONTAL 3
  1877.  
  1878. /* TrueType options */
  1879. #define DMTT_BITMAP     1       /* print TT fonts as graphics */
  1880. #define DMTT_DOWNLOAD   2       /* download TT fonts as soft fonts */
  1881. #define DMTT_SUBDEV     3       /* substitute device fonts for TT fonts */
  1882. #if(WINVER >= 0x0400)
  1883. #define DMTT_DOWNLOAD_OUTLINE 4 /* download TT fonts as outline soft fonts */
  1884. #endif /* WINVER >= 0x0400 */
  1885.  
  1886. /* Collation selections */
  1887. #define DMCOLLATE_FALSE  0
  1888. #define DMCOLLATE_TRUE   1
  1889.  
  1890. /* DEVMODE dmDisplayFlags flags */
  1891.  
  1892. //#define DM_GRAYSCALE    0x00000001 /* This flag is no longer valid */
  1893. //#define DM_INTERLACED   0x00000002 /* This flag is no longer valid */
  1894. #define DMDISPLAYFLAGS_TEXTMODE 0x00000004
  1895.  
  1896. #if(WINVER >= 0x0400)
  1897. /* ICM methods */
  1898. #define DMICMMETHOD_NONE    1   /* ICM disabled */
  1899. #define DMICMMETHOD_SYSTEM  2   /* ICM handled by system */
  1900. #define DMICMMETHOD_DRIVER  3   /* ICM handled by driver */
  1901. #define DMICMMETHOD_DEVICE  4   /* ICM handled by device */
  1902.  
  1903. #define DMICMMETHOD_USER  256   /* Device-specific methods start here */
  1904.  
  1905. /* ICM Intents */
  1906. #define DMICM_SATURATE      1   /* Maximize color saturation */
  1907. #define DMICM_CONTRAST      2   /* Maximize color contrast */
  1908. #define DMICM_COLORMETRIC   3   /* Use specific color metric */
  1909.  
  1910. #define DMICM_USER        256   /* Device-specific intents start here */
  1911.  
  1912. /* Media types */
  1913.  
  1914. #define DMMEDIA_STANDARD      1   /* Standard paper */
  1915. #define DMMEDIA_TRANSPARENCY  2   /* Transparency */
  1916. #define DMMEDIA_GLOSSY        3   /* Glossy paper */
  1917.  
  1918. #define DMMEDIA_USER        256   /* Device-specific media start here */
  1919.  
  1920. /* Dither types */
  1921. #define DMDITHER_NONE       1   /* No dithering */
  1922. #define DMDITHER_COARSE     2   /* Dither with a coarse brush */
  1923. #define DMDITHER_FINE       3   /* Dither with a fine brush */
  1924. #define DMDITHER_LINEART    4   /* LineArt dithering */
  1925. #define DMDITHER_GRAYSCALE  5   /* Device does grayscaling */
  1926.  
  1927. #define DMDITHER_USER     256   /* Device-specific dithers start here */
  1928. #endif /* WINVER >= 0x0400 */
  1929.  
  1930. /* GetRegionData/ExtCreateRegion */
  1931.  
  1932. #define RDH_RECTANGLES  1
  1933.  
  1934. typedef struct _RGNDATAHEADER {
  1935.     DWORD   dwSize;
  1936.     DWORD   iType;
  1937.     DWORD   nCount;
  1938.     DWORD   nRgnSize;
  1939.     RECT    rcBound;
  1940. } RGNDATAHEADER, *PRGNDATAHEADER;
  1941.  
  1942. typedef struct _RGNDATA {
  1943.     RGNDATAHEADER   rdh;
  1944.     char            Buffer[1];
  1945. } RGNDATA, *PRGNDATA, NEAR *NPRGNDATA, FAR *LPRGNDATA;
  1946.  
  1947.  
  1948. typedef struct _ABC {
  1949.     int     abcA;
  1950.     UINT    abcB;
  1951.     int     abcC;
  1952. } ABC, *PABC, NEAR *NPABC, FAR *LPABC;
  1953.  
  1954. typedef struct _ABCFLOAT {
  1955.     FLOAT   abcfA;
  1956.     FLOAT   abcfB;
  1957.     FLOAT   abcfC;
  1958. } ABCFLOAT, *PABCFLOAT, NEAR *NPABCFLOAT, FAR *LPABCFLOAT;
  1959.  
  1960. #ifndef NOTEXTMETRIC
  1961.  
  1962. typedef struct _OUTLINETEXTMETRICA {
  1963.     UINT    otmSize;
  1964.     TEXTMETRICA otmTextMetrics;
  1965.     BYTE    otmFiller;
  1966.     PANOSE  otmPanoseNumber;
  1967.     UINT    otmfsSelection;
  1968.     UINT    otmfsType;
  1969.      int    otmsCharSlopeRise;
  1970.      int    otmsCharSlopeRun;
  1971.      int    otmItalicAngle;
  1972.     UINT    otmEMSquare;
  1973.      int    otmAscent;
  1974.      int    otmDescent;
  1975.     UINT    otmLineGap;
  1976.     UINT    otmsCapEmHeight;
  1977.     UINT    otmsXHeight;
  1978.     RECT    otmrcFontBox;
  1979.      int    otmMacAscent;
  1980.      int    otmMacDescent;
  1981.     UINT    otmMacLineGap;
  1982.     UINT    otmusMinimumPPEM;
  1983.     POINT   otmptSubscriptSize;
  1984.     POINT   otmptSubscriptOffset;
  1985.     POINT   otmptSuperscriptSize;
  1986.     POINT   otmptSuperscriptOffset;
  1987.     UINT    otmsStrikeoutSize;
  1988.      int    otmsStrikeoutPosition;
  1989.      int    otmsUnderscoreSize;
  1990.      int    otmsUnderscorePosition;
  1991.     PSTR    otmpFamilyName;
  1992.     PSTR    otmpFaceName;
  1993.     PSTR    otmpStyleName;
  1994.     PSTR    otmpFullName;
  1995. } OUTLINETEXTMETRICA, *POUTLINETEXTMETRICA, NEAR *NPOUTLINETEXTMETRICA, FAR *LPOUTLINETEXTMETRICA;
  1996. typedef struct _OUTLINETEXTMETRICW {
  1997.     UINT    otmSize;
  1998.     TEXTMETRICW otmTextMetrics;
  1999.     BYTE    otmFiller;
  2000.     PANOSE  otmPanoseNumber;
  2001.     UINT    otmfsSelection;
  2002.     UINT    otmfsType;
  2003.      int    otmsCharSlopeRise;
  2004.      int    otmsCharSlopeRun;
  2005.      int    otmItalicAngle;
  2006.     UINT    otmEMSquare;
  2007.      int    otmAscent;
  2008.      int    otmDescent;
  2009.     UINT    otmLineGap;
  2010.     UINT    otmsCapEmHeight;
  2011.     UINT    otmsXHeight;
  2012.     RECT    otmrcFontBox;
  2013.      int    otmMacAscent;
  2014.      int    otmMacDescent;
  2015.     UINT    otmMacLineGap;
  2016.     UINT    otmusMinimumPPEM;
  2017.     POINT   otmptSubscriptSize;
  2018.     POINT   otmptSubscriptOffset;
  2019.     POINT   otmptSuperscriptSize;
  2020.     POINT   otmptSuperscriptOffset;
  2021.     UINT    otmsStrikeoutSize;
  2022.      int    otmsStrikeoutPosition;
  2023.      int    otmsUnderscoreSize;
  2024.      int    otmsUnderscorePosition;
  2025.     PSTR    otmpFamilyName;
  2026.     PSTR    otmpFaceName;
  2027.     PSTR    otmpStyleName;
  2028.     PSTR    otmpFullName;
  2029. } OUTLINETEXTMETRICW, *POUTLINETEXTMETRICW, NEAR *NPOUTLINETEXTMETRICW, FAR *LPOUTLINETEXTMETRICW;
  2030. #ifdef UNICODE
  2031. typedef OUTLINETEXTMETRICW OUTLINETEXTMETRIC;
  2032. typedef POUTLINETEXTMETRICW POUTLINETEXTMETRIC;
  2033. typedef NPOUTLINETEXTMETRICW NPOUTLINETEXTMETRIC;
  2034. typedef LPOUTLINETEXTMETRICW LPOUTLINETEXTMETRIC;
  2035. #else
  2036. typedef OUTLINETEXTMETRICA OUTLINETEXTMETRIC;
  2037. typedef POUTLINETEXTMETRICA POUTLINETEXTMETRIC;
  2038. typedef NPOUTLINETEXTMETRICA NPOUTLINETEXTMETRIC;
  2039. typedef LPOUTLINETEXTMETRICA LPOUTLINETEXTMETRIC;
  2040. #endif // UNICODE
  2041.  
  2042. #endif /* NOTEXTMETRIC */
  2043.  
  2044.  
  2045. typedef struct tagPOLYTEXTA
  2046. {
  2047.     int       x;
  2048.     int       y;
  2049.     UINT      n;
  2050.     LPCSTR    lpstr;
  2051.     UINT      uiFlags;
  2052.     RECT      rcl;
  2053.     int      *pdx;
  2054. } POLYTEXTA, *PPOLYTEXTA, NEAR *NPPOLYTEXTA, FAR *LPPOLYTEXTA;
  2055. typedef struct tagPOLYTEXTW
  2056. {
  2057.     int       x;
  2058.     int       y;
  2059.     UINT      n;
  2060.     LPCWSTR   lpstr;
  2061.     UINT      uiFlags;
  2062.     RECT      rcl;
  2063.     int      *pdx;
  2064. } POLYTEXTW, *PPOLYTEXTW, NEAR *NPPOLYTEXTW, FAR *LPPOLYTEXTW;
  2065. #ifdef UNICODE
  2066. typedef POLYTEXTW POLYTEXT;
  2067. typedef PPOLYTEXTW PPOLYTEXT;
  2068. typedef NPPOLYTEXTW NPPOLYTEXT;
  2069. typedef LPPOLYTEXTW LPPOLYTEXT;
  2070. #else
  2071. typedef POLYTEXTA POLYTEXT;
  2072. typedef PPOLYTEXTA PPOLYTEXT;
  2073. typedef NPPOLYTEXTA NPPOLYTEXT;
  2074. typedef LPPOLYTEXTA LPPOLYTEXT;
  2075. #endif // UNICODE
  2076.  
  2077. typedef struct _FIXED {
  2078.     WORD    fract;
  2079.     short   value;
  2080. } FIXED;
  2081.  
  2082.  
  2083. typedef struct _MAT2 {
  2084.      FIXED  eM11;
  2085.      FIXED  eM12;
  2086.      FIXED  eM21;
  2087.      FIXED  eM22;
  2088. } MAT2, FAR *LPMAT2;
  2089.  
  2090.  
  2091.  
  2092. typedef struct _GLYPHMETRICS {
  2093.     UINT    gmBlackBoxX;
  2094.     UINT    gmBlackBoxY;
  2095.     POINT   gmptGlyphOrigin;
  2096.     short   gmCellIncX;
  2097.     short   gmCellIncY;
  2098. } GLYPHMETRICS, FAR *LPGLYPHMETRICS;
  2099.  
  2100. //  GetGlyphOutline constants
  2101.  
  2102. #define GGO_METRICS        0
  2103. #define GGO_BITMAP         1
  2104. #define GGO_NATIVE         2
  2105.  
  2106. #if(WINVER >= 0x0400)
  2107. #define  GGO_GRAY2_BITMAP   4
  2108. #define  GGO_GRAY4_BITMAP   5
  2109. #define  GGO_GRAY8_BITMAP   6
  2110. #define  GGO_GLYPH_INDEX    0x0080
  2111. #endif /* WINVER >= 0x0400 */
  2112.  
  2113. #define TT_POLYGON_TYPE   24
  2114.  
  2115. #define TT_PRIM_LINE       1
  2116. #define TT_PRIM_QSPLINE    2
  2117.  
  2118. typedef struct tagPOINTFX
  2119. {
  2120.     FIXED x;
  2121.     FIXED y;
  2122. } POINTFX, FAR* LPPOINTFX;
  2123.  
  2124. typedef struct tagTTPOLYCURVE
  2125. {
  2126.     WORD    wType;
  2127.     WORD    cpfx;
  2128.     POINTFX apfx[1];
  2129. } TTPOLYCURVE, FAR* LPTTPOLYCURVE;
  2130.  
  2131. typedef struct tagTTPOLYGONHEADER
  2132. {
  2133.     DWORD   cb;
  2134.     DWORD   dwType;
  2135.     POINTFX pfxStart;
  2136. } TTPOLYGONHEADER, FAR* LPTTPOLYGONHEADER;
  2137.  
  2138.  
  2139. #if(WINVER >= 0x0400)
  2140. #define GCP_DBCS           0x0001
  2141. #define GCP_REORDER        0x0002
  2142. #define GCP_USEKERNING     0x0008
  2143. #define GCP_GLYPHSHAPE     0x0010
  2144. #define GCP_LIGATE         0x0020
  2145. ////#define GCP_GLYPHINDEXING  0x0080
  2146. #define GCP_DIACRITIC      0x0100
  2147. #define GCP_KASHIDA        0x0400
  2148. #define GCP_ERROR          0x8000
  2149. #define FLI_MASK           0x103B
  2150.  
  2151. #define GCP_JUSTIFY        0x00010000L
  2152. ////#define GCP_NODIACRITICS   0x00020000L
  2153. #define FLI_GLYPHS         0x00040000L
  2154. #define GCP_CLASSIN        0x00080000L
  2155. #define GCP_MAXEXTENT      0x00100000L
  2156. #define GCP_JUSTIFYIN      0x00200000L
  2157. #define GCP_DISPLAYZWG      0x00400000L
  2158. #define GCP_SYMSWAPOFF      0x00800000L
  2159. #define GCP_NUMERICOVERRIDE 0x01000000L
  2160. #define GCP_NEUTRALOVERRIDE 0x02000000L
  2161. #define GCP_NUMERICSLATIN   0x04000000L
  2162. #define GCP_NUMERICSLOCAL   0x08000000L
  2163.  
  2164. #define GCPCLASS_LATIN                  1
  2165. #define GCPCLASS_HEBREW                 2
  2166. #define GCPCLASS_ARABIC                 2
  2167. #define GCPCLASS_NEUTRAL                3
  2168. #define GCPCLASS_LOCALNUMBER            4
  2169. #define GCPCLASS_LATINNUMBER            5
  2170. #define GCPCLASS_LATINNUMERICTERMINATOR 6
  2171. #define GCPCLASS_LATINNUMERICSEPARATOR  7
  2172. #define GCPCLASS_NUMERICSEPARATOR       8
  2173. #define GCPCLASS_PREBOUNDLTR         0x80
  2174. #define GCPCLASS_PREBOUNDRTL         0x40
  2175. #define GCPCLASS_POSTBOUNDLTR        0x20
  2176. #define GCPCLASS_POSTBOUNDRTL        0x10
  2177.  
  2178. #define GCPGLYPH_LINKBEFORE          0x8000
  2179. #define GCPGLYPH_LINKAFTER           0x4000
  2180.  
  2181.  
  2182. typedef struct tagGCP_RESULTSA
  2183.     {
  2184.     DWORD   lStructSize;
  2185.     LPSTR     lpOutString;
  2186.     UINT FAR *lpOrder;
  2187.     int FAR  *lpDx;
  2188.     int FAR  *lpCaretPos;
  2189.     LPSTR   lpClass;
  2190.     LPWSTR  lpGlyphs;
  2191.     UINT    nGlyphs;
  2192.     int     nMaxFit;
  2193.     } GCP_RESULTSA, FAR* LPGCP_RESULTSA;
  2194. typedef struct tagGCP_RESULTSW
  2195.     {
  2196.     DWORD   lStructSize;
  2197.     LPWSTR    lpOutString;
  2198.     UINT FAR *lpOrder;
  2199.     int FAR  *lpDx;
  2200.     int FAR  *lpCaretPos;
  2201.     LPSTR   lpClass;
  2202.     LPWSTR  lpGlyphs;
  2203.     UINT    nGlyphs;
  2204.     int     nMaxFit;
  2205.     } GCP_RESULTSW, FAR* LPGCP_RESULTSW;
  2206. #ifdef UNICODE
  2207. typedef GCP_RESULTSW GCP_RESULTS;
  2208. typedef LPGCP_RESULTSW LPGCP_RESULTS;
  2209. #else
  2210. typedef GCP_RESULTSA GCP_RESULTS;
  2211. typedef LPGCP_RESULTSA LPGCP_RESULTS;
  2212. #endif // UNICODE
  2213. #endif /* WINVER >= 0x0400 */
  2214.  
  2215. typedef struct _RASTERIZER_STATUS {
  2216.     short   nSize;
  2217.     short   wFlags;
  2218.     short   nLanguageID;
  2219. } RASTERIZER_STATUS, FAR *LPRASTERIZER_STATUS;
  2220.  
  2221. /* bits defined in wFlags of RASTERIZER_STATUS */
  2222. #define TT_AVAILABLE    0x0001
  2223. #define TT_ENABLED      0x0002
  2224.  
  2225. /* Pixel format descriptor */
  2226. typedef struct tagPIXELFORMATDESCRIPTOR
  2227. {
  2228.     WORD  nSize;
  2229.     WORD  nVersion;
  2230.     DWORD dwFlags;
  2231.     BYTE  iPixelType;
  2232.     BYTE  cColorBits;
  2233.     BYTE  cRedBits;
  2234.     BYTE  cRedShift;
  2235.     BYTE  cGreenBits;
  2236.     BYTE  cGreenShift;
  2237.     BYTE  cBlueBits;
  2238.     BYTE  cBlueShift;
  2239.     BYTE  cAlphaBits;
  2240.     BYTE  cAlphaShift;
  2241.     BYTE  cAccumBits;
  2242.     BYTE  cAccumRedBits;
  2243.     BYTE  cAccumGreenBits;
  2244.     BYTE  cAccumBlueBits;
  2245.     BYTE  cAccumAlphaBits;
  2246.     BYTE  cDepthBits;
  2247.     BYTE  cStencilBits;
  2248.     BYTE  cAuxBuffers;
  2249.     BYTE  iLayerType;
  2250.     BYTE  bReserved;
  2251.     DWORD dwLayerMask;
  2252.     DWORD dwVisibleMask;
  2253.     DWORD dwDamageMask;
  2254. } PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, FAR *LPPIXELFORMATDESCRIPTOR;
  2255.  
  2256. /* pixel types */
  2257. #define PFD_TYPE_RGBA        0
  2258. #define PFD_TYPE_COLORINDEX  1
  2259.  
  2260. /* layer types */
  2261. #define PFD_MAIN_PLANE       0
  2262. #define PFD_OVERLAY_PLANE    1
  2263. #define PFD_UNDERLAY_PLANE   (-1)
  2264.  
  2265. /* PIXELFORMATDESCRIPTOR flags */
  2266. #define PFD_DOUBLEBUFFER            0x00000001
  2267. #define PFD_STEREO                  0x00000002
  2268. #define PFD_DRAW_TO_WINDOW          0x00000004
  2269. #define PFD_DRAW_TO_BITMAP          0x00000008
  2270. #define PFD_SUPPORT_GDI             0x00000010
  2271. #define PFD_SUPPORT_OPENGL          0x00000020
  2272. #define PFD_GENERIC_FORMAT          0x00000040
  2273. #define PFD_NEED_PALETTE            0x00000080
  2274. #define PFD_NEED_SYSTEM_PALETTE     0x00000100
  2275. #define PFD_SWAP_EXCHANGE           0x00000200
  2276. #define PFD_SWAP_COPY               0x00000400
  2277. #define PFD_SWAP_LAYER_BUFFERS      0x00000800
  2278. #define PFD_GENERIC_ACCELERATED     0x00001000
  2279.  
  2280. /* PIXELFORMATDESCRIPTOR flags for use in ChoosePixelFormat only */
  2281. #define PFD_DEPTH_DONTCARE          0x20000000
  2282. #define PFD_DOUBLEBUFFER_DONTCARE   0x40000000
  2283. #define PFD_STEREO_DONTCARE         0x80000000
  2284.  
  2285. #ifdef STRICT
  2286. #if !defined(NOTEXTMETRIC)
  2287. typedef int (CALLBACK* OLDFONTENUMPROCA)(CONST LOGFONTA *, CONST TEXTMETRICA *, DWORD, LPARAM);
  2288. typedef int (CALLBACK* OLDFONTENUMPROCW)(CONST LOGFONTW *, CONST TEXTMETRICW *, DWORD, LPARAM);
  2289. #ifdef UNICODE
  2290. #define OLDFONTENUMPROC  OLDFONTENUMPROCW
  2291. #else
  2292. #define OLDFONTENUMPROC  OLDFONTENUMPROCA
  2293. #endif // !UNICODE
  2294. #else
  2295. typedef int (CALLBACK* OLDFONTENUMPROCA)(CONST LOGFONTA * ,CONST VOID *, DWORD, LPARAM);
  2296. typedef int (CALLBACK* OLDFONTENUMPROCW)(CONST LOGFONTW * ,CONST VOID *, DWORD, LPARAM);
  2297. #ifdef UNICODE
  2298. #define OLDFONTENUMPROC  OLDFONTENUMPROCW
  2299. #else
  2300. #define OLDFONTENUMPROC  OLDFONTENUMPROCA
  2301. #endif // !UNICODE
  2302. #endif
  2303.  
  2304. typedef OLDFONTENUMPROCA    FONTENUMPROCA;
  2305. typedef OLDFONTENUMPROCW    FONTENUMPROCW;
  2306. #ifdef UNICODE
  2307. typedef FONTENUMPROCW FONTENUMPROC;
  2308. #else
  2309. typedef FONTENUMPROCA FONTENUMPROC;
  2310. #endif // UNICODE
  2311.  
  2312. typedef int (CALLBACK* GOBJENUMPROC)(LPVOID, LPARAM);
  2313. typedef VOID (CALLBACK* LINEDDAPROC)(int, int, LPARAM);
  2314. #else
  2315. typedef FARPROC OLDFONTENUMPROC;
  2316. typedef FARPROC FONTENUMPROCA;
  2317. typedef FARPROC FONTENUMPROCW;
  2318. #ifdef UNICODE
  2319. typedef FONTENUMPROCW FONTENUMPROC;
  2320. #else
  2321. typedef FONTENUMPROCA FONTENUMPROC;
  2322. #endif // UNICODE
  2323. typedef FARPROC GOBJENUMPROC;
  2324. typedef FARPROC LINEDDAPROC;
  2325. #endif
  2326.  
  2327. WINGDIAPI int WINAPI AddFontResourceA(LPCSTR);
  2328. WINGDIAPI int WINAPI AddFontResourceW(LPCWSTR);
  2329. #ifdef UNICODE
  2330. #define AddFontResource  AddFontResourceW
  2331. #else
  2332. #define AddFontResource  AddFontResourceA
  2333. #endif // !UNICODE
  2334.  
  2335. WINGDIAPI BOOL  WINAPI AnimatePalette(HPALETTE, UINT, UINT, CONST PALETTEENTRY *);
  2336. WINGDIAPI BOOL  WINAPI Arc(HDC, int, int, int, int, int, int, int, int);
  2337. WINGDIAPI BOOL  WINAPI BitBlt(HDC, int, int, int, int, HDC, int, int, DWORD);
  2338. WINGDIAPI BOOL  WINAPI CancelDC(HDC);
  2339. WINGDIAPI BOOL  WINAPI Chord(HDC, int, int, int, int, int, int, int, int);
  2340. WINGDIAPI int   WINAPI ChoosePixelFormat(HDC, CONST PIXELFORMATDESCRIPTOR *);
  2341. WINGDIAPI HMETAFILE  WINAPI CloseMetaFile(HDC);
  2342. WINGDIAPI int     WINAPI CombineRgn(HRGN, HRGN, HRGN, int);
  2343. WINGDIAPI HMETAFILE WINAPI CopyMetaFileA(HMETAFILE, LPCSTR);
  2344. WINGDIAPI HMETAFILE WINAPI CopyMetaFileW(HMETAFILE, LPCWSTR);
  2345. #ifdef UNICODE
  2346. #define CopyMetaFile  CopyMetaFileW
  2347. #else
  2348. #define CopyMetaFile  CopyMetaFileA
  2349. #endif // !UNICODE
  2350. WINGDIAPI HBITMAP WINAPI CreateBitmap(int, int, UINT, UINT, CONST VOID *);
  2351. WINGDIAPI HBITMAP WINAPI CreateBitmapIndirect(CONST BITMAP *);
  2352. WINGDIAPI HBRUSH  WINAPI CreateBrushIndirect(CONST LOGBRUSH *);
  2353. WINGDIAPI HBITMAP WINAPI CreateCompatibleBitmap(HDC, int, int);
  2354. WINGDIAPI HBITMAP WINAPI CreateDiscardableBitmap(HDC, int, int);
  2355. WINGDIAPI HDC     WINAPI CreateCompatibleDC(HDC);
  2356. WINGDIAPI HDC     WINAPI CreateDCA(LPCSTR, LPCSTR , LPCSTR , CONST DEVMODEA *);
  2357. WINGDIAPI HDC     WINAPI CreateDCW(LPCWSTR, LPCWSTR , LPCWSTR , CONST DEVMODEW *);
  2358. #ifdef UNICODE
  2359. #define CreateDC  CreateDCW
  2360. #else
  2361. #define CreateDC  CreateDCA
  2362. #endif // !UNICODE
  2363. WINGDIAPI HBITMAP WINAPI CreateDIBitmap(HDC, CONST BITMAPINFOHEADER *, DWORD, CONST VOID *, CONST BITMAPINFO *, UINT);
  2364. WINGDIAPI HBRUSH  WINAPI CreateDIBPatternBrush(HGLOBAL, UINT);
  2365. WINGDIAPI HBRUSH  WINAPI CreateDIBPatternBrushPt(CONST VOID *, UINT);
  2366. WINGDIAPI HRGN    WINAPI CreateEllipticRgn(int, int, int, int);
  2367. WINGDIAPI HRGN    WINAPI CreateEllipticRgnIndirect(CONST RECT *);
  2368. WINGDIAPI HFONT   WINAPI CreateFontIndirectA(CONST LOGFONTA *);
  2369. WINGDIAPI HFONT   WINAPI CreateFontIndirectW(CONST LOGFONTW *);
  2370. #ifdef UNICODE
  2371. #define CreateFontIndirect  CreateFontIndirectW
  2372. #else
  2373. #define CreateFontIndirect  CreateFontIndirectA
  2374. #endif // !UNICODE
  2375. WINGDIAPI HFONT   WINAPI CreateFontA(int, int, int, int, int, DWORD,
  2376.                              DWORD, DWORD, DWORD, DWORD, DWORD,
  2377.                              DWORD, DWORD, LPCSTR);
  2378. WINGDIAPI HFONT   WINAPI CreateFontW(int, int, int, int, int, DWORD,
  2379.                              DWORD, DWORD, DWORD, DWORD, DWORD,
  2380.                              DWORD, DWORD, LPCWSTR);
  2381. #ifdef UNICODE
  2382. #define CreateFont  CreateFontW
  2383. #else
  2384. #define CreateFont  CreateFontA
  2385. #endif // !UNICODE
  2386.  
  2387. WINGDIAPI HBRUSH  WINAPI CreateHatchBrush(int, COLORREF);
  2388. WINGDIAPI HDC     WINAPI CreateICA(LPCSTR, LPCSTR , LPCSTR , CONST DEVMODEA *);
  2389. WINGDIAPI HDC     WINAPI CreateICW(LPCWSTR, LPCWSTR , LPCWSTR , CONST DEVMODEW *);
  2390. #ifdef UNICODE
  2391. #define CreateIC  CreateICW
  2392. #else
  2393. #define CreateIC  CreateICA
  2394. #endif // !UNICODE
  2395. WINGDIAPI HDC     WINAPI CreateMetaFileA(LPCSTR);
  2396. WINGDIAPI HDC     WINAPI CreateMetaFileW(LPCWSTR);
  2397. #ifdef UNICODE
  2398. #define CreateMetaFile  CreateMetaFileW
  2399. #else
  2400. #define CreateMetaFile  CreateMetaFileA
  2401. #endif // !UNICODE
  2402. WINGDIAPI HPALETTE WINAPI CreatePalette(CONST LOGPALETTE *);
  2403. WINGDIAPI HPEN    WINAPI CreatePen(int, int, COLORREF);
  2404. WINGDIAPI HPEN    WINAPI CreatePenIndirect(CONST LOGPEN *);
  2405. WINGDIAPI HRGN    WINAPI CreatePolyPolygonRgn(CONST POINT *, CONST INT *, int, int);
  2406. WINGDIAPI HBRUSH  WINAPI CreatePatternBrush(HBITMAP);
  2407. WINGDIAPI HRGN    WINAPI CreateRectRgn(int, int, int, int);
  2408. WINGDIAPI HRGN    WINAPI CreateRectRgnIndirect(CONST RECT *);
  2409. WINGDIAPI HRGN    WINAPI CreateRoundRectRgn(int, int, int, int, int, int);
  2410. WINGDIAPI BOOL    WINAPI CreateScalableFontResourceA(DWORD, LPCSTR, LPCSTR, LPCSTR);
  2411. WINGDIAPI BOOL    WINAPI CreateScalableFontResourceW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR);
  2412. #ifdef UNICODE
  2413. #define CreateScalableFontResource  CreateScalableFontResourceW
  2414. #else
  2415. #define CreateScalableFontResource  CreateScalableFontResourceA
  2416. #endif // !UNICODE
  2417. WINGDIAPI HBRUSH  WINAPI CreateSolidBrush(COLORREF);
  2418.  
  2419. WINGDIAPI BOOL WINAPI DeleteDC(HDC);
  2420. WINGDIAPI BOOL WINAPI DeleteMetaFile(HMETAFILE);
  2421. WINGDIAPI BOOL WINAPI DeleteObject(HGDIOBJ);
  2422. WINGDIAPI int  WINAPI DescribePixelFormat(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR);
  2423.  
  2424. /* define types of pointers to ExtDeviceMode() and DeviceCapabilities()
  2425.  * functions for Win 3.1 compatibility
  2426.  */
  2427.  
  2428. typedef UINT   (CALLBACK* LPFNDEVMODE)(HWND, HMODULE, LPDEVMODE, LPSTR, LPSTR, LPDEVMODE, LPSTR, UINT);
  2429.  
  2430. typedef DWORD  (CALLBACK* LPFNDEVCAPS)(LPSTR, LPSTR, UINT, LPSTR, LPDEVMODE);
  2431.  
  2432. /* mode selections for the device mode function */
  2433. #define DM_UPDATE           1
  2434. #define DM_COPY             2
  2435. #define DM_PROMPT           4
  2436. #define DM_MODIFY           8
  2437.  
  2438. #define DM_IN_BUFFER        DM_MODIFY
  2439. #define DM_IN_PROMPT        DM_PROMPT
  2440. #define DM_OUT_BUFFER       DM_COPY
  2441. #define DM_OUT_DEFAULT      DM_UPDATE
  2442.  
  2443. /* device capabilities indices */
  2444. #define DC_FIELDS           1
  2445. #define DC_PAPERS           2
  2446. #define DC_PAPERSIZE        3
  2447. #define DC_MINEXTENT        4
  2448. #define DC_MAXEXTENT        5
  2449. #define DC_BINS             6
  2450. #define DC_DUPLEX           7
  2451. #define DC_SIZE             8
  2452. #define DC_EXTRA            9
  2453. #define DC_VERSION          10
  2454. #define DC_DRIVER           11
  2455. #define DC_BINNAMES         12
  2456. #define DC_ENUMRESOLUTIONS  13
  2457. #define DC_FILEDEPENDENCIES 14
  2458. #define DC_TRUETYPE         15
  2459. #define DC_PAPERNAMES       16
  2460. #define DC_ORIENTATION      17
  2461. #define DC_COPIES           18
  2462. #if(WINVER >= 0x0400)
  2463. #define DC_BINADJUST            19
  2464. #define DC_EMF_COMPLIANT        20
  2465. #define DC_DATATYPE_PRODUCED    21
  2466. #define DC_COLLATE              22
  2467. #endif /* WINVER >= 0x0400 */
  2468.  
  2469. /* bit fields of the return value (DWORD) for DC_TRUETYPE */
  2470. #define DCTT_BITMAP             0x0000001L
  2471. #define DCTT_DOWNLOAD           0x0000002L
  2472. #define DCTT_SUBDEV             0x0000004L
  2473. #if(WINVER >= 0x0400)
  2474. #define DCTT_DOWNLOAD_OUTLINE   0x0000008L
  2475.  
  2476. /* return values for DC_BINADJUST */
  2477. #define DCBA_FACEUPNONE       0x0000
  2478. #define DCBA_FACEUPCENTER     0x0001
  2479. #define DCBA_FACEUPLEFT       0x0002
  2480. #define DCBA_FACEUPRIGHT      0x0003
  2481. #define DCBA_FACEDOWNNONE     0x0100
  2482. #define DCBA_FACEDOWNCENTER   0x0101
  2483. #define DCBA_FACEDOWNLEFT     0x0102
  2484. #define DCBA_FACEDOWNRIGHT    0x0103
  2485. #endif /* WINVER >= 0x0400 */
  2486.  
  2487. WINSPOOLAPI int  WINAPI DeviceCapabilitiesA(LPCSTR, LPCSTR, WORD,
  2488.                                 LPSTR, CONST DEVMODEA *);
  2489. WINSPOOLAPI int  WINAPI DeviceCapabilitiesW(LPCWSTR, LPCWSTR, WORD,
  2490.                                 LPWSTR, CONST DEVMODEW *);
  2491. #ifdef UNICODE
  2492. #define DeviceCapabilities  DeviceCapabilitiesW
  2493. #else
  2494. #define DeviceCapabilities  DeviceCapabilitiesA
  2495. #endif // !UNICODE
  2496.  
  2497. WINGDIAPI int  WINAPI DrawEscape(HDC, int, int, LPCSTR);
  2498. WINGDIAPI BOOL WINAPI Ellipse(HDC, int, int, int, int);
  2499.  
  2500. #if(WINVER >= 0x0400)
  2501. WINGDIAPI int  WINAPI EnumFontFamiliesExA(HDC, LPLOGFONTA,FONTENUMPROCA, LPARAM,DWORD);
  2502. WINGDIAPI int  WINAPI EnumFontFamiliesExW(HDC, LPLOGFONTW,FONTENUMPROCW, LPARAM,DWORD);
  2503. #ifdef UNICODE
  2504. #define EnumFontFamiliesEx  EnumFontFamiliesExW
  2505. #else
  2506. #define EnumFontFamiliesEx  EnumFontFamiliesExA
  2507. #endif // !UNICODE
  2508. #endif /* WINVER >= 0x0400 */
  2509.  
  2510. WINGDIAPI int  WINAPI EnumFontFamiliesA(HDC, LPCSTR, FONTENUMPROCA, LPARAM);
  2511. WINGDIAPI int  WINAPI EnumFontFamiliesW(HDC, LPCWSTR, FONTENUMPROCW, LPARAM);
  2512. #ifdef UNICODE
  2513. #define EnumFontFamilies  EnumFontFamiliesW
  2514. #else
  2515. #define EnumFontFamilies  EnumFontFamiliesA
  2516. #endif // !UNICODE
  2517. WINGDIAPI int  WINAPI EnumFontsA(HDC, LPCSTR,  FONTENUMPROCA, LPARAM);
  2518. WINGDIAPI int  WINAPI EnumFontsW(HDC, LPCWSTR,  FONTENUMPROCW, LPARAM);
  2519. #ifdef UNICODE
  2520. #define EnumFonts  EnumFontsW
  2521. #else
  2522. #define EnumFonts  EnumFontsA
  2523. #endif // !UNICODE
  2524.  
  2525. #ifdef STRICT
  2526. WINGDIAPI int  WINAPI EnumObjects(HDC, int, GOBJENUMPROC, LPARAM);
  2527. #else
  2528. WINGDIAPI int  WINAPI EnumObjects(HDC, int, GOBJENUMPROC, LPVOID);
  2529. #endif
  2530.  
  2531.  
  2532. WINGDIAPI BOOL WINAPI EqualRgn(HRGN, HRGN);
  2533. WINGDIAPI int  WINAPI Escape(HDC, int, int, LPCSTR, LPVOID);
  2534. WINGDIAPI int  WINAPI ExtEscape(HDC, int, int, LPCSTR, int, LPSTR);
  2535. WINGDIAPI int  WINAPI ExcludeClipRect(HDC, int, int, int, int);
  2536. WINGDIAPI HRGN WINAPI ExtCreateRegion(CONST XFORM *, DWORD, CONST RGNDATA *);
  2537. WINGDIAPI BOOL  WINAPI ExtFloodFill(HDC, int, int, COLORREF, UINT);
  2538. WINGDIAPI BOOL   WINAPI FillRgn(HDC, HRGN, HBRUSH);
  2539. WINGDIAPI BOOL   WINAPI FloodFill(HDC, int, int, COLORREF);
  2540. WINGDIAPI BOOL   WINAPI FrameRgn(HDC, HRGN, HBRUSH, int, int);
  2541. WINGDIAPI int   WINAPI GetROP2(HDC);
  2542. WINGDIAPI BOOL  WINAPI GetAspectRatioFilterEx(HDC, LPSIZE);
  2543. WINGDIAPI COLORREF WINAPI GetBkColor(HDC);
  2544. WINGDIAPI int   WINAPI GetBkMode(HDC);
  2545. WINGDIAPI LONG  WINAPI GetBitmapBits(HBITMAP, LONG, LPVOID);
  2546. WINGDIAPI BOOL  WINAPI GetBitmapDimensionEx(HBITMAP, LPSIZE);
  2547. WINGDIAPI UINT  WINAPI GetBoundsRect(HDC, LPRECT, UINT);
  2548.  
  2549. WINGDIAPI BOOL  WINAPI GetBrushOrgEx(HDC, LPPOINT);
  2550.  
  2551. WINGDIAPI BOOL  WINAPI GetCharWidthA(HDC, UINT, UINT, LPINT);
  2552. WINGDIAPI BOOL  WINAPI GetCharWidthW(HDC, UINT, UINT, LPINT);
  2553. #ifdef UNICODE
  2554. #define GetCharWidth  GetCharWidthW
  2555. #else
  2556. #define GetCharWidth  GetCharWidthA
  2557. #endif // !UNICODE
  2558. WINGDIAPI BOOL  WINAPI GetCharWidth32A(HDC, UINT, UINT, LPINT);
  2559. WINGDIAPI BOOL  WINAPI GetCharWidth32W(HDC, UINT, UINT, LPINT);
  2560. #ifdef UNICODE
  2561. #define GetCharWidth32  GetCharWidth32W
  2562. #else
  2563. #define GetCharWidth32  GetCharWidth32A
  2564. #endif // !UNICODE
  2565. WINGDIAPI BOOL  APIENTRY GetCharWidthFloatA(HDC, UINT, UINT, PFLOAT);
  2566. WINGDIAPI BOOL  APIENTRY GetCharWidthFloatW(HDC, UINT, UINT, PFLOAT);
  2567. #ifdef UNICODE
  2568. #define GetCharWidthFloat  GetCharWidthFloatW
  2569. #else
  2570. #define GetCharWidthFloat  GetCharWidthFloatA
  2571. #endif // !UNICODE
  2572.  
  2573. WINGDIAPI BOOL  APIENTRY GetCharABCWidthsA(HDC, UINT, UINT, LPABC);
  2574. WINGDIAPI BOOL  APIENTRY GetCharABCWidthsW(HDC, UINT, UINT, LPABC);
  2575. #ifdef UNICODE
  2576. #define GetCharABCWidths  GetCharABCWidthsW
  2577. #else
  2578. #define GetCharABCWidths  GetCharABCWidthsA
  2579. #endif // !UNICODE
  2580. WINGDIAPI BOOL  APIENTRY GetCharABCWidthsFloatA(HDC, UINT, UINT, LPABCFLOAT);
  2581. WINGDIAPI BOOL  APIENTRY GetCharABCWidthsFloatW(HDC, UINT, UINT, LPABCFLOAT);
  2582. #ifdef UNICODE
  2583. #define GetCharABCWidthsFloat  GetCharABCWidthsFloatW
  2584. #else
  2585. #define GetCharABCWidthsFloat  GetCharABCWidthsFloatA
  2586. #endif // !UNICODE
  2587.  
  2588. WINGDIAPI int   WINAPI GetClipBox(HDC, LPRECT);
  2589. WINGDIAPI int   WINAPI GetClipRgn(HDC, HRGN);
  2590. WINGDIAPI int   WINAPI GetMetaRgn(HDC, HRGN);
  2591. WINGDIAPI HGDIOBJ WINAPI GetCurrentObject(HDC, UINT);
  2592. WINGDIAPI BOOL  WINAPI GetCurrentPositionEx(HDC, LPPOINT);
  2593. WINGDIAPI int   WINAPI GetDeviceCaps(HDC, int);
  2594. WINGDIAPI int   WINAPI GetDIBits(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT);
  2595. WINGDIAPI DWORD WINAPI GetFontData(HDC, DWORD, DWORD, LPVOID, DWORD);
  2596. WINGDIAPI DWORD WINAPI GetGlyphOutlineA(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, LPVOID, CONST MAT2 *);
  2597. WINGDIAPI DWORD WINAPI GetGlyphOutlineW(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, LPVOID, CONST MAT2 *);
  2598. #ifdef UNICODE
  2599. #define GetGlyphOutline  GetGlyphOutlineW
  2600. #else
  2601. #define GetGlyphOutline  GetGlyphOutlineA
  2602. #endif // !UNICODE
  2603. WINGDIAPI int   WINAPI GetGraphicsMode(HDC);
  2604. WINGDIAPI int   WINAPI GetMapMode(HDC);
  2605. WINGDIAPI UINT  WINAPI GetMetaFileBitsEx(HMETAFILE, UINT, LPVOID);
  2606. WINGDIAPI HMETAFILE   WINAPI GetMetaFileA(LPCSTR);
  2607. WINGDIAPI HMETAFILE   WINAPI GetMetaFileW(LPCWSTR);
  2608. #ifdef UNICODE
  2609. #define GetMetaFile  GetMetaFileW
  2610. #else
  2611. #define GetMetaFile  GetMetaFileA
  2612. #endif // !UNICODE
  2613. WINGDIAPI COLORREF WINAPI GetNearestColor(HDC, COLORREF);
  2614. WINGDIAPI UINT  WINAPI GetNearestPaletteIndex(HPALETTE, COLORREF);
  2615. WINGDIAPI DWORD WINAPI GetObjectType(HGDIOBJ h);
  2616.  
  2617. #ifndef NOTEXTMETRIC
  2618.  
  2619. WINGDIAPI UINT APIENTRY GetOutlineTextMetricsA(HDC, UINT, LPOUTLINETEXTMETRICA);
  2620. WINGDIAPI UINT APIENTRY GetOutlineTextMetricsW(HDC, UINT, LPOUTLINETEXTMETRICW);
  2621. #ifdef UNICODE
  2622. #define GetOutlineTextMetrics  GetOutlineTextMetricsW
  2623. #else
  2624. #define GetOutlineTextMetrics  GetOutlineTextMetricsA
  2625. #endif // !UNICODE
  2626.  
  2627. #endif /* NOTEXTMETRIC */
  2628.  
  2629. WINGDIAPI UINT  WINAPI GetPaletteEntries(HPALETTE, UINT, UINT, LPPALETTEENTRY);
  2630. WINGDIAPI COLORREF WINAPI GetPixel(HDC, int, int);
  2631. WINGDIAPI int   WINAPI GetPixelFormat(HDC);
  2632. WINGDIAPI int   WINAPI GetPolyFillMode(HDC);
  2633. WINGDIAPI BOOL  WINAPI GetRasterizerCaps(LPRASTERIZER_STATUS, UINT);
  2634. WINGDIAPI DWORD WINAPI GetRegionData(HRGN, DWORD, LPRGNDATA);
  2635. WINGDIAPI int   WINAPI GetRgnBox(HRGN, LPRECT);
  2636. WINGDIAPI HGDIOBJ WINAPI GetStockObject(int);
  2637. WINGDIAPI int   WINAPI GetStretchBltMode(HDC);
  2638. WINGDIAPI UINT  WINAPI GetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY);
  2639. WINGDIAPI UINT  WINAPI GetSystemPaletteUse(HDC);
  2640. WINGDIAPI int   WINAPI GetTextCharacterExtra(HDC);
  2641. WINGDIAPI UINT  WINAPI GetTextAlign(HDC);
  2642. WINGDIAPI COLORREF WINAPI GetTextColor(HDC);
  2643.  
  2644. WINGDIAPI BOOL  APIENTRY GetTextExtentPointA(
  2645.                     HDC,
  2646.                     LPCSTR,
  2647.                     int,
  2648.                     LPSIZE
  2649.                     );
  2650. WINGDIAPI BOOL  APIENTRY GetTextExtentPointW(
  2651.                     HDC,
  2652.                     LPCWSTR,
  2653.                     int,
  2654.                     LPSIZE
  2655.                     );
  2656. #ifdef UNICODE
  2657. #define GetTextExtentPoint  GetTextExtentPointW
  2658. #else
  2659. #define GetTextExtentPoint  GetTextExtentPointA
  2660. #endif // !UNICODE
  2661.  
  2662. WINGDIAPI BOOL  APIENTRY GetTextExtentPoint32A(
  2663.                     HDC,
  2664.                     LPCSTR,
  2665.                     int,
  2666.                     LPSIZE
  2667.                     );
  2668. WINGDIAPI BOOL  APIENTRY GetTextExtentPoint32W(
  2669.                     HDC,
  2670.                     LPCWSTR,
  2671.                     int,
  2672.                     LPSIZE
  2673.                     );
  2674. #ifdef UNICODE
  2675. #define GetTextExtentPoint32  GetTextExtentPoint32W
  2676. #else
  2677. #define GetTextExtentPoint32  GetTextExtentPoint32A
  2678. #endif // !UNICODE
  2679.  
  2680. WINGDIAPI BOOL  APIENTRY GetTextExtentExPointA(
  2681.                     HDC,
  2682.                     LPCSTR,
  2683.                     int,
  2684.                     int,
  2685.                     LPINT,
  2686.                     LPINT,
  2687.                     LPSIZE
  2688.                     );
  2689. WINGDIAPI BOOL  APIENTRY GetTextExtentExPointW(
  2690.                     HDC,
  2691.                     LPCWSTR,
  2692.                     int,
  2693.                     int,
  2694.                     LPINT,
  2695.                     LPINT,
  2696.                     LPSIZE
  2697.                     );
  2698. #ifdef UNICODE
  2699. #define GetTextExtentExPoint  GetTextExtentExPointW
  2700. #else
  2701. #define GetTextExtentExPoint  GetTextExtentExPointA
  2702. #endif // !UNICODE
  2703.  
  2704. #if(WINVER >= 0x0400)
  2705. WINGDIAPI int WINAPI GetTextCharset(HDC hdc);
  2706. WINGDIAPI int WINAPI GetTextCharsetInfo(HDC hdc, LPFONTSIGNATURE lpSig, DWORD dwFlags);
  2707. WINGDIAPI BOOL WINAPI TranslateCharsetInfo( DWORD FAR *lpSrc, LPCHARSETINFO lpCs, DWORD dwFlags);
  2708. WINGDIAPI DWORD WINAPI GetFontLanguageInfo( HDC );
  2709. WINGDIAPI DWORD WINAPI GetCharacterPlacementA(HDC, LPCSTR, int, int, LPGCP_RESULTSA, DWORD);
  2710. WINGDIAPI DWORD WINAPI GetCharacterPlacementW(HDC, LPCWSTR, int, int, LPGCP_RESULTSW, DWORD);
  2711. #ifdef UNICODE
  2712. #define GetCharacterPlacement  GetCharacterPlacementW
  2713. #else
  2714. #define GetCharacterPlacement  GetCharacterPlacementA
  2715. #endif // !UNICODE
  2716. #endif /* WINVER >= 0x0400 */
  2717.  
  2718. WINGDIAPI BOOL  WINAPI GetViewportExtEx(HDC, LPSIZE);
  2719. WINGDIAPI BOOL  WINAPI GetViewportOrgEx(HDC, LPPOINT);
  2720. WINGDIAPI BOOL  WINAPI GetWindowExtEx(HDC, LPSIZE);
  2721. WINGDIAPI BOOL  WINAPI GetWindowOrgEx(HDC, LPPOINT);
  2722.  
  2723. WINGDIAPI int  WINAPI IntersectClipRect(HDC, int, int, int, int);
  2724. WINGDIAPI BOOL WINAPI InvertRgn(HDC, HRGN);
  2725. WINGDIAPI BOOL WINAPI LineDDA(int, int, int, int, LINEDDAPROC, LPARAM);
  2726. WINGDIAPI BOOL WINAPI LineTo(HDC, int, int);
  2727. WINGDIAPI BOOL WINAPI MaskBlt(HDC, int, int, int, int,
  2728.               HDC, int, int, HBITMAP, int, int, DWORD);
  2729. WINGDIAPI BOOL WINAPI PlgBlt(HDC, CONST POINT *, HDC, int, int, int,
  2730.                      int, HBITMAP, int, int);
  2731.  
  2732. WINGDIAPI int  WINAPI OffsetClipRgn(HDC, int, int);
  2733. WINGDIAPI int  WINAPI OffsetRgn(HRGN, int, int);
  2734. WINGDIAPI BOOL WINAPI PatBlt(HDC, int, int, int, int, DWORD);
  2735. WINGDIAPI BOOL WINAPI Pie(HDC, int, int, int, int, int, int, int, int);
  2736. WINGDIAPI BOOL WINAPI PlayMetaFile(HDC, HMETAFILE);
  2737. WINGDIAPI BOOL WINAPI PaintRgn(HDC, HRGN);
  2738. WINGDIAPI BOOL WINAPI PolyPolygon(HDC, CONST POINT *, CONST INT *, int);
  2739. WINGDIAPI BOOL WINAPI PtInRegion(HRGN, int, int);
  2740. WINGDIAPI BOOL WINAPI PtVisible(HDC, int, int);
  2741. WINGDIAPI BOOL WINAPI RectInRegion(HRGN, CONST RECT *);
  2742. WINGDIAPI BOOL WINAPI RectVisible(HDC, CONST RECT *);
  2743. WINGDIAPI BOOL WINAPI Rectangle(HDC, int, int, int, int);
  2744. WINGDIAPI BOOL WINAPI RestoreDC(HDC, int);
  2745. WINGDIAPI HDC  WINAPI ResetDCA(HDC, CONST DEVMODEA *);
  2746. WINGDIAPI HDC  WINAPI ResetDCW(HDC, CONST DEVMODEW *);
  2747. #ifdef UNICODE
  2748. #define ResetDC  ResetDCW
  2749. #else
  2750. #define ResetDC  ResetDCA
  2751. #endif // !UNICODE
  2752. WINGDIAPI UINT WINAPI RealizePalette(HDC);
  2753. WINGDIAPI BOOL WINAPI RemoveFontResourceA(LPCSTR);
  2754. WINGDIAPI BOOL WINAPI RemoveFontResourceW(LPCWSTR);
  2755. #ifdef UNICODE
  2756. #define RemoveFontResource  RemoveFontResourceW
  2757. #else
  2758. #define RemoveFontResource  RemoveFontResourceA
  2759. #endif // !UNICODE
  2760. WINGDIAPI BOOL  WINAPI RoundRect(HDC, int, int, int, int, int, int);
  2761. WINGDIAPI BOOL WINAPI ResizePalette(HPALETTE, UINT);
  2762.  
  2763. WINGDIAPI int  WINAPI SaveDC(HDC);
  2764. WINGDIAPI int  WINAPI SelectClipRgn(HDC, HRGN);
  2765. WINGDIAPI int  WINAPI ExtSelectClipRgn(HDC, HRGN, int);
  2766. WINGDIAPI int  WINAPI SetMetaRgn(HDC);
  2767. WINGDIAPI HGDIOBJ WINAPI SelectObject(HDC, HGDIOBJ);
  2768. WINGDIAPI HPALETTE WINAPI SelectPalette(HDC, HPALETTE, BOOL);
  2769. WINGDIAPI COLORREF WINAPI SetBkColor(HDC, COLORREF);
  2770. WINGDIAPI int   WINAPI SetBkMode(HDC, int);
  2771. WINGDIAPI LONG  WINAPI SetBitmapBits(HBITMAP, DWORD, CONST VOID *);
  2772.  
  2773. WINGDIAPI UINT  WINAPI SetBoundsRect(HDC, CONST RECT *, UINT);
  2774. WINGDIAPI int   WINAPI SetDIBits(HDC, HBITMAP, UINT, UINT, CONST VOID *, CONST BITMAPINFO *, UINT);
  2775. WINGDIAPI int   WINAPI SetDIBitsToDevice(HDC, int, int, DWORD, DWORD, int,
  2776.         int, UINT, UINT, CONST VOID *, CONST BITMAPINFO *, UINT);
  2777. WINGDIAPI DWORD WINAPI SetMapperFlags(HDC, DWORD);
  2778. WINGDIAPI int   WINAPI SetGraphicsMode(HDC hdc, int iMode);
  2779. WINGDIAPI int   WINAPI SetMapMode(HDC, int);
  2780. WINGDIAPI HMETAFILE   WINAPI SetMetaFileBitsEx(UINT, CONST BYTE *);
  2781. WINGDIAPI UINT  WINAPI SetPaletteEntries(HPALETTE, UINT, UINT, CONST PALETTEENTRY *);
  2782. WINGDIAPI COLORREF WINAPI SetPixel(HDC, int, int, COLORREF);
  2783. WINGDIAPI BOOL   WINAPI SetPixelV(HDC, int, int, COLORREF);
  2784. WINGDIAPI BOOL  WINAPI SetPixelFormat(HDC, int, CONST PIXELFORMATDESCRIPTOR *);
  2785. WINGDIAPI int   WINAPI SetPolyFillMode(HDC, int);
  2786. WINGDIAPI BOOL   WINAPI StretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);
  2787. WINGDIAPI BOOL   WINAPI SetRectRgn(HRGN, int, int, int, int);
  2788. WINGDIAPI int   WINAPI StretchDIBits(HDC, int, int, int, int, int, int, int, int, CONST
  2789.         VOID *, CONST BITMAPINFO *, UINT, DWORD);
  2790. WINGDIAPI int   WINAPI SetROP2(HDC, int);
  2791. WINGDIAPI int   WINAPI SetStretchBltMode(HDC, int);
  2792. WINGDIAPI UINT  WINAPI SetSystemPaletteUse(HDC, UINT);
  2793. WINGDIAPI int   WINAPI SetTextCharacterExtra(HDC, int);
  2794. WINGDIAPI COLORREF WINAPI SetTextColor(HDC, COLORREF);
  2795. WINGDIAPI UINT  WINAPI SetTextAlign(HDC, UINT);
  2796. WINGDIAPI BOOL  WINAPI SetTextJustification(HDC, int, int);
  2797. WINGDIAPI BOOL  WINAPI UpdateColors(HDC);
  2798.  
  2799. #ifndef NOMETAFILE
  2800.  
  2801. WINGDIAPI BOOL  WINAPI PlayMetaFileRecord(HDC, LPHANDLETABLE, LPMETARECORD, UINT);
  2802. typedef int (CALLBACK* MFENUMPROC)(HDC, HANDLETABLE FAR*, METARECORD FAR*, int, LPARAM);
  2803. WINGDIAPI BOOL  WINAPI EnumMetaFile(HDC, HMETAFILE, MFENUMPROC, LPARAM);
  2804.  
  2805. typedef int (CALLBACK* ENHMFENUMPROC)(HDC, HANDLETABLE FAR*, CONST ENHMETARECORD *, int, LPARAM);
  2806.  
  2807. // Enhanced Metafile Function Declarations
  2808.  
  2809. WINGDIAPI HENHMETAFILE WINAPI CloseEnhMetaFile(HDC);
  2810. WINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileA(HENHMETAFILE, LPCSTR);
  2811. WINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileW(HENHMETAFILE, LPCWSTR);
  2812. #ifdef UNICODE
  2813. #define CopyEnhMetaFile  CopyEnhMetaFileW
  2814. #else
  2815. #define CopyEnhMetaFile  CopyEnhMetaFileA
  2816. #endif // !UNICODE
  2817. WINGDIAPI HDC   WINAPI CreateEnhMetaFileA(HDC, LPCSTR, CONST RECT *, LPCSTR);
  2818. WINGDIAPI HDC   WINAPI CreateEnhMetaFileW(HDC, LPCWSTR, CONST RECT *, LPCWSTR);
  2819. #ifdef UNICODE
  2820. #define CreateEnhMetaFile  CreateEnhMetaFileW
  2821. #else
  2822. #define CreateEnhMetaFile  CreateEnhMetaFileA
  2823. #endif // !UNICODE
  2824. WINGDIAPI BOOL  WINAPI DeleteEnhMetaFile(HENHMETAFILE);
  2825. WINGDIAPI BOOL  WINAPI EnumEnhMetaFile(HDC, HENHMETAFILE, ENHMFENUMPROC,
  2826.         LPVOID, CONST RECT *);
  2827. WINGDIAPI HENHMETAFILE  WINAPI GetEnhMetaFileA(LPCSTR);
  2828. WINGDIAPI HENHMETAFILE  WINAPI GetEnhMetaFileW(LPCWSTR);
  2829. #ifdef UNICODE
  2830. #define GetEnhMetaFile  GetEnhMetaFileW
  2831. #else
  2832. #define GetEnhMetaFile  GetEnhMetaFileA
  2833. #endif // !UNICODE
  2834. WINGDIAPI UINT  WINAPI GetEnhMetaFileBits(HENHMETAFILE, UINT, LPBYTE);
  2835. WINGDIAPI UINT  WINAPI GetEnhMetaFileDescriptionA(HENHMETAFILE, UINT, LPSTR );
  2836. WINGDIAPI UINT  WINAPI GetEnhMetaFileDescriptionW(HENHMETAFILE, UINT, LPWSTR );
  2837. #ifdef UNICODE
  2838. #define GetEnhMetaFileDescription  GetEnhMetaFileDescriptionW
  2839. #else
  2840. #define GetEnhMetaFileDescription  GetEnhMetaFileDescriptionA
  2841. #endif // !UNICODE
  2842. WINGDIAPI UINT  WINAPI GetEnhMetaFileHeader(HENHMETAFILE, UINT, LPENHMETAHEADER );
  2843. WINGDIAPI UINT  WINAPI GetEnhMetaFilePaletteEntries(HENHMETAFILE, UINT, LPPALETTEENTRY );
  2844. WINGDIAPI UINT  WINAPI GetEnhMetaFilePixelFormat(HENHMETAFILE, UINT,
  2845.                                                  PIXELFORMATDESCRIPTOR *);
  2846. WINGDIAPI UINT  WINAPI GetWinMetaFileBits(HENHMETAFILE, UINT, LPBYTE, INT, HDC);
  2847. WINGDIAPI BOOL  WINAPI PlayEnhMetaFile(HDC, HENHMETAFILE, CONST RECT *);
  2848. WINGDIAPI BOOL  WINAPI PlayEnhMetaFileRecord(HDC, LPHANDLETABLE, CONST ENHMETARECORD *, UINT);
  2849. WINGDIAPI HENHMETAFILE  WINAPI SetEnhMetaFileBits(UINT, CONST BYTE *);
  2850. WINGDIAPI HENHMETAFILE  WINAPI SetWinMetaFileBits(UINT, CONST BYTE *, HDC, CONST METAFILEPICT *);
  2851. WINGDIAPI BOOL  WINAPI GdiComment(HDC, UINT, CONST BYTE *);
  2852.  
  2853. #endif  /* NOMETAFILE */
  2854.  
  2855. #ifndef NOTEXTMETRIC
  2856.  
  2857. WINGDIAPI BOOL WINAPI GetTextMetricsA(HDC, LPTEXTMETRICA);
  2858. WINGDIAPI BOOL WINAPI GetTextMetricsW(HDC, LPTEXTMETRICW);
  2859. #ifdef UNICODE
  2860. #define GetTextMetrics  GetTextMetricsW
  2861. #else
  2862. #define GetTextMetrics  GetTextMetricsA
  2863. #endif // !UNICODE
  2864.  
  2865. #endif
  2866.  
  2867. /* new GDI */
  2868.  
  2869. typedef struct tagDIBSECTION {
  2870.     BITMAP              dsBm;
  2871.     BITMAPINFOHEADER    dsBmih;
  2872.     DWORD               dsBitfields[3];
  2873.     HANDLE              dshSection;
  2874.     DWORD               dsOffset;
  2875. } DIBSECTION, FAR *LPDIBSECTION, *PDIBSECTION;
  2876.  
  2877. WINGDIAPI BOOL WINAPI AngleArc(HDC, int, int, DWORD, FLOAT, FLOAT);
  2878. WINGDIAPI BOOL WINAPI PolyPolyline(HDC, CONST POINT *, CONST DWORD *, DWORD);
  2879. WINGDIAPI BOOL WINAPI GetWorldTransform(HDC, LPXFORM);
  2880. WINGDIAPI BOOL WINAPI SetWorldTransform(HDC, CONST XFORM *);
  2881. WINGDIAPI BOOL WINAPI ModifyWorldTransform(HDC, CONST XFORM *, DWORD);
  2882. WINGDIAPI BOOL WINAPI CombineTransform(LPXFORM, CONST XFORM *, CONST XFORM *);
  2883. WINGDIAPI HBITMAP WINAPI CreateDIBSection(HDC, CONST BITMAPINFO *, UINT, VOID **, HANDLE, DWORD);
  2884. WINGDIAPI UINT WINAPI GetDIBColorTable(HDC, UINT, UINT, RGBQUAD *);
  2885. WINGDIAPI UINT WINAPI SetDIBColorTable(HDC, UINT, UINT, CONST RGBQUAD *);
  2886.  
  2887. /* Flags value for COLORADJUSTMENT */
  2888. #define CA_NEGATIVE                 0x0001
  2889. #define CA_LOG_FILTER               0x0002
  2890.  
  2891. /* IlluminantIndex values */
  2892. #define ILLUMINANT_DEVICE_DEFAULT   0
  2893. #define ILLUMINANT_A                1
  2894. #define ILLUMINANT_B                2
  2895. #define ILLUMINANT_C                3
  2896. #define ILLUMINANT_D50              4
  2897. #define ILLUMINANT_D55              5
  2898. #define ILLUMINANT_D65              6
  2899. #define ILLUMINANT_D75              7
  2900. #define ILLUMINANT_F2               8
  2901. #define ILLUMINANT_MAX_INDEX        ILLUMINANT_F2
  2902.  
  2903. #define ILLUMINANT_TUNGSTEN         ILLUMINANT_A
  2904. #define ILLUMINANT_DAYLIGHT         ILLUMINANT_C
  2905. #define ILLUMINANT_FLUORESCENT      ILLUMINANT_F2
  2906. #define ILLUMINANT_NTSC             ILLUMINANT_C
  2907.  
  2908. /* Min and max for RedGamma, GreenGamma, BlueGamma */
  2909. #define RGB_GAMMA_MIN               (WORD)02500
  2910. #define RGB_GAMMA_MAX               (WORD)65000
  2911.  
  2912. /* Min and max for ReferenceBlack and ReferenceWhite */
  2913. #define REFERENCE_WHITE_MIN         (WORD)6000
  2914. #define REFERENCE_WHITE_MAX         (WORD)10000
  2915. #define REFERENCE_BLACK_MIN         (WORD)0
  2916. #define REFERENCE_BLACK_MAX         (WORD)4000
  2917.  
  2918. /* Min and max for Contrast, Brightness, Colorfulness, RedGreenTint */
  2919. #define COLOR_ADJ_MIN               (SHORT)-100
  2920. #define COLOR_ADJ_MAX               (SHORT)100
  2921.  
  2922. typedef struct  tagCOLORADJUSTMENT {
  2923.     WORD   caSize;
  2924.     WORD   caFlags;
  2925.     WORD   caIlluminantIndex;
  2926.     WORD   caRedGamma;
  2927.     WORD   caGreenGamma;
  2928.     WORD   caBlueGamma;
  2929.     WORD   caReferenceBlack;
  2930.     WORD   caReferenceWhite;
  2931.     SHORT  caContrast;
  2932.     SHORT  caBrightness;
  2933.     SHORT  caColorfulness;
  2934.     SHORT  caRedGreenTint;
  2935. } COLORADJUSTMENT, *PCOLORADJUSTMENT, FAR *LPCOLORADJUSTMENT;
  2936.  
  2937. WINGDIAPI BOOL WINAPI SetColorAdjustment(HDC, CONST COLORADJUSTMENT *);
  2938. WINGDIAPI BOOL WINAPI GetColorAdjustment(HDC, LPCOLORADJUSTMENT);
  2939. WINGDIAPI HPALETTE WINAPI CreateHalftonePalette(HDC);
  2940.  
  2941. #ifdef STRICT
  2942. typedef BOOL (CALLBACK* ABORTPROC)(HDC, int);
  2943. #else
  2944. typedef FARPROC ABORTPROC;
  2945. #endif
  2946.  
  2947. typedef struct _DOCINFOA {
  2948.     int     cbSize;
  2949.     LPCSTR   lpszDocName;
  2950.     LPCSTR   lpszOutput;
  2951. #if (WINVER >= 0x0400)
  2952.     LPCSTR   lpszDatatype;
  2953.     DWORD    fwType;
  2954. #endif /* WINVER */
  2955. } DOCINFOA, *LPDOCINFOA;
  2956. typedef struct _DOCINFOW {
  2957.     int     cbSize;
  2958.     LPCWSTR  lpszDocName;
  2959.     LPCWSTR  lpszOutput;
  2960. #if (WINVER >= 0x0400)
  2961.     LPCWSTR  lpszDatatype;
  2962.     DWORD    fwType;
  2963. #endif /* WINVER */
  2964. } DOCINFOW, *LPDOCINFOW;
  2965. #ifdef UNICODE
  2966. typedef DOCINFOW DOCINFO;
  2967. typedef LPDOCINFOW LPDOCINFO;
  2968. #else
  2969. typedef DOCINFOA DOCINFO;
  2970. typedef LPDOCINFOA LPDOCINFO;
  2971. #endif // UNICODE
  2972.  
  2973. #if(WINVER >= 0x0400)
  2974. #define DI_APPBANDING   0x0001
  2975. #endif /* WINVER >= 0x0400 */
  2976.  
  2977. WINGDIAPI int WINAPI StartDocA(HDC, CONST DOCINFOA *);
  2978. WINGDIAPI int WINAPI StartDocW(HDC, CONST DOCINFOW *);
  2979. #ifdef UNICODE
  2980. #define StartDoc  StartDocW
  2981. #else
  2982. #define StartDoc  StartDocA
  2983. #endif // !UNICODE
  2984. WINGDIAPI int WINAPI EndDoc(HDC);
  2985. WINGDIAPI int WINAPI StartPage(HDC);
  2986. WINGDIAPI int WINAPI EndPage(HDC);
  2987. WINGDIAPI int WINAPI AbortDoc(HDC);
  2988. WINGDIAPI int WINAPI SetAbortProc(HDC, ABORTPROC);
  2989.  
  2990. WINGDIAPI BOOL WINAPI AbortPath(HDC);
  2991. WINGDIAPI BOOL WINAPI ArcTo(HDC, int, int, int, int, int, int,int, int);
  2992. WINGDIAPI BOOL WINAPI BeginPath(HDC);
  2993. WINGDIAPI BOOL WINAPI CloseFigure(HDC);
  2994. WINGDIAPI BOOL WINAPI EndPath(HDC);
  2995. WINGDIAPI BOOL WINAPI FillPath(HDC);
  2996. WINGDIAPI BOOL WINAPI FlattenPath(HDC);
  2997. WINGDIAPI int  WINAPI GetPath(HDC, LPPOINT, LPBYTE, int);
  2998. WINGDIAPI HRGN WINAPI PathToRegion(HDC);
  2999. WINGDIAPI BOOL WINAPI PolyDraw(HDC, CONST POINT *, CONST BYTE *, int);
  3000. WINGDIAPI BOOL WINAPI SelectClipPath(HDC, int);
  3001. WINGDIAPI int  WINAPI SetArcDirection(HDC, int);
  3002. WINGDIAPI BOOL WINAPI SetMiterLimit(HDC, FLOAT, PFLOAT);
  3003. WINGDIAPI BOOL WINAPI StrokeAndFillPath(HDC);
  3004. WINGDIAPI BOOL WINAPI StrokePath(HDC);
  3005. WINGDIAPI BOOL WINAPI WidenPath(HDC);
  3006. WINGDIAPI HPEN WINAPI ExtCreatePen(DWORD, DWORD, CONST LOGBRUSH *, DWORD, CONST DWORD *);
  3007. WINGDIAPI BOOL WINAPI GetMiterLimit(HDC, PFLOAT);
  3008. WINGDIAPI int  WINAPI GetArcDirection(HDC);
  3009.  
  3010. WINGDIAPI int   WINAPI GetObjectA(HGDIOBJ, int, LPVOID);
  3011. WINGDIAPI int   WINAPI GetObjectW(HGDIOBJ, int, LPVOID);
  3012. #ifdef UNICODE
  3013. #define GetObject  GetObjectW
  3014. #else
  3015. #define GetObject  GetObjectA
  3016. #endif // !UNICODE
  3017. WINGDIAPI BOOL  WINAPI MoveToEx(HDC, int, int, LPPOINT);
  3018. WINGDIAPI BOOL  WINAPI TextOutA(HDC, int, int, LPCSTR, int);
  3019. WINGDIAPI BOOL  WINAPI TextOutW(HDC, int, int, LPCWSTR, int);
  3020. #ifdef UNICODE
  3021. #define TextOut  TextOutW
  3022. #else
  3023. #define TextOut  TextOutA
  3024. #endif // !UNICODE
  3025. WINGDIAPI BOOL  WINAPI ExtTextOutA(HDC, int, int, UINT, CONST RECT *,LPCSTR, UINT, CONST INT *);
  3026. WINGDIAPI BOOL  WINAPI ExtTextOutW(HDC, int, int, UINT, CONST RECT *,LPCWSTR, UINT, CONST INT *);
  3027. #ifdef UNICODE
  3028. #define ExtTextOut  ExtTextOutW
  3029. #else
  3030. #define ExtTextOut  ExtTextOutA
  3031. #endif // !UNICODE
  3032. WINGDIAPI BOOL  WINAPI PolyTextOutA(HDC, CONST POLYTEXTA *, int);
  3033. WINGDIAPI BOOL  WINAPI PolyTextOutW(HDC, CONST POLYTEXTW *, int);
  3034. #ifdef UNICODE
  3035. #define PolyTextOut  PolyTextOutW
  3036. #else
  3037. #define PolyTextOut  PolyTextOutA
  3038. #endif // !UNICODE
  3039.  
  3040. WINGDIAPI HRGN  WINAPI CreatePolygonRgn(CONST POINT *, int, int);
  3041. WINGDIAPI BOOL  WINAPI DPtoLP(HDC, LPPOINT, int);
  3042. WINGDIAPI BOOL  WINAPI LPtoDP(HDC, LPPOINT, int);
  3043. WINGDIAPI BOOL  WINAPI Polygon(HDC, CONST POINT *, int);
  3044. WINGDIAPI BOOL  WINAPI Polyline(HDC, CONST POINT *, int);
  3045.  
  3046. WINGDIAPI BOOL  WINAPI PolyBezier(HDC, CONST POINT *, DWORD);
  3047. WINGDIAPI BOOL  WINAPI PolyBezierTo(HDC, CONST POINT *, DWORD);
  3048. WINGDIAPI BOOL  WINAPI PolylineTo(HDC, CONST POINT *, DWORD);
  3049.  
  3050. WINGDIAPI BOOL  WINAPI SetViewportExtEx(HDC, int, int, LPSIZE);
  3051. WINGDIAPI BOOL  WINAPI SetViewportOrgEx(HDC, int, int, LPPOINT);
  3052. WINGDIAPI BOOL  WINAPI SetWindowExtEx(HDC, int, int, LPSIZE);
  3053. WINGDIAPI BOOL  WINAPI SetWindowOrgEx(HDC, int, int, LPPOINT);
  3054.  
  3055. WINGDIAPI BOOL  WINAPI OffsetViewportOrgEx(HDC, int, int, LPPOINT);
  3056. WINGDIAPI BOOL  WINAPI OffsetWindowOrgEx(HDC, int, int, LPPOINT);
  3057. WINGDIAPI BOOL  WINAPI ScaleViewportExtEx(HDC, int, int, int, int, LPSIZE);
  3058. WINGDIAPI BOOL  WINAPI ScaleWindowExtEx(HDC, int, int, int, int, LPSIZE);
  3059. WINGDIAPI BOOL  WINAPI SetBitmapDimensionEx(HBITMAP, int, int, LPSIZE);
  3060. WINGDIAPI BOOL  WINAPI SetBrushOrgEx(HDC, int, int, LPPOINT);
  3061.  
  3062. WINGDIAPI int   WINAPI GetTextFaceA(HDC, int, LPSTR);
  3063. WINGDIAPI int   WINAPI GetTextFaceW(HDC, int, LPWSTR);
  3064. #ifdef UNICODE
  3065. #define GetTextFace  GetTextFaceW
  3066. #else
  3067. #define GetTextFace  GetTextFaceA
  3068. #endif // !UNICODE
  3069.  
  3070. #define FONTMAPPER_MAX 10
  3071.  
  3072. typedef struct tagKERNINGPAIR {
  3073.    WORD wFirst;
  3074.    WORD wSecond;
  3075.    int  iKernAmount;
  3076. } KERNINGPAIR, *LPKERNINGPAIR;
  3077.  
  3078. WINGDIAPI DWORD WINAPI GetKerningPairsA(HDC, DWORD, LPKERNINGPAIR);
  3079. WINGDIAPI DWORD WINAPI GetKerningPairsW(HDC, DWORD, LPKERNINGPAIR);
  3080. #ifdef UNICODE
  3081. #define GetKerningPairs  GetKerningPairsW
  3082. #else
  3083. #define GetKerningPairs  GetKerningPairsA
  3084. #endif // !UNICODE
  3085.  
  3086. WINGDIAPI BOOL  WINAPI GetDCOrgEx(HDC,LPPOINT);
  3087. WINGDIAPI BOOL  WINAPI FixBrushOrgEx(HDC,int,int,LPPOINT);
  3088. WINGDIAPI BOOL  WINAPI UnrealizeObject(HGDIOBJ);
  3089.  
  3090. WINGDIAPI BOOL  WINAPI GdiFlush(VOID);
  3091. WINGDIAPI DWORD WINAPI GdiSetBatchLimit(DWORD);
  3092. WINGDIAPI DWORD WINAPI GdiGetBatchLimit(VOID);
  3093.  
  3094. #if(WINVER >= 0x0400)
  3095.  
  3096. #define ICM_OFF   1
  3097. #define ICM_ON    2
  3098. #define ICM_QUERY 3
  3099.  
  3100. int WINAPI SetICMMode(HDC, int);
  3101. BOOL WINAPI CheckColorsInGamut(HDC,LPVOID,LPVOID,DWORD);
  3102. HANDLE WINAPI GetColorSpace(HDC);
  3103. BOOL WINAPI GetLogColorSpaceA(HCOLORSPACE,LPLOGCOLORSPACEA,DWORD);
  3104. BOOL WINAPI GetLogColorSpaceW(HCOLORSPACE,LPLOGCOLORSPACEW,DWORD);
  3105. #ifdef UNICODE
  3106. #define GetLogColorSpace  GetLogColorSpaceW
  3107. #else
  3108. #define GetLogColorSpace  GetLogColorSpaceA
  3109. #endif // !UNICODE
  3110. HCOLORSPACE WINAPI CreateColorSpaceA(LPLOGCOLORSPACEA);
  3111. HCOLORSPACE WINAPI CreateColorSpaceW(LPLOGCOLORSPACEW);
  3112. #ifdef UNICODE
  3113. #define CreateColorSpace  CreateColorSpaceW
  3114. #else
  3115. #define CreateColorSpace  CreateColorSpaceA
  3116. #endif // !UNICODE
  3117. BOOL WINAPI SetColorSpace(HDC,HCOLORSPACE);
  3118. BOOL WINAPI DeleteColorSpace(HCOLORSPACE);
  3119. BOOL WINAPI GetICMProfileA(HDC,LPDWORD,LPSTR);
  3120. BOOL WINAPI GetICMProfileW(HDC,LPDWORD,LPWSTR);
  3121. #ifdef UNICODE
  3122. #define GetICMProfile  GetICMProfileW
  3123. #else
  3124. #define GetICMProfile  GetICMProfileA
  3125. #endif // !UNICODE
  3126. BOOL WINAPI SetICMProfileA(HDC,LPSTR);
  3127. BOOL WINAPI SetICMProfileW(HDC,LPWSTR);
  3128. #ifdef UNICODE
  3129. #define SetICMProfile  SetICMProfileW
  3130. #else
  3131. #define SetICMProfile  SetICMProfileA
  3132. #endif // !UNICODE
  3133. BOOL WINAPI GetDeviceGammaRamp(HDC,LPVOID);
  3134. BOOL WINAPI SetDeviceGammaRamp(HDC,LPVOID);
  3135. BOOL WINAPI ColorMatchToTarget(HDC,HDC,DWORD);
  3136. typedef int (CALLBACK* ICMENUMPROCA)(LPSTR, LPARAM);
  3137. typedef int (CALLBACK* ICMENUMPROCW)(LPWSTR, LPARAM);
  3138. #ifdef UNICODE
  3139. #define ICMENUMPROC  ICMENUMPROCW
  3140. #else
  3141. #define ICMENUMPROC  ICMENUMPROCA
  3142. #endif // !UNICODE
  3143. int WINAPI EnumICMProfilesA(HDC,ICMENUMPROCA,LPARAM);
  3144. int WINAPI EnumICMProfilesW(HDC,ICMENUMPROCW,LPARAM);
  3145. #ifdef UNICODE
  3146. #define EnumICMProfiles  EnumICMProfilesW
  3147. #else
  3148. #define EnumICMProfiles  EnumICMProfilesA
  3149. #endif // !UNICODE
  3150.  
  3151. #endif /* WINVER >= 0x0400 */
  3152. #ifndef NOMETAFILE
  3153.  
  3154. // Enhanced metafile constants.
  3155.  
  3156. #define ENHMETA_SIGNATURE       0x464D4520
  3157.  
  3158. // Stock object flag used in the object handle index in the enhanced
  3159. // metafile records.
  3160. // E.g. The object handle index (META_STOCK_OBJECT | BLACK_BRUSH)
  3161. // represents the stock object BLACK_BRUSH.
  3162.  
  3163. #define ENHMETA_STOCK_OBJECT    0x80000000
  3164.  
  3165. // Enhanced metafile record types.
  3166.  
  3167. #define EMR_HEADER                      1
  3168. #define EMR_POLYBEZIER                  2
  3169. #define EMR_POLYGON                     3
  3170. #define EMR_POLYLINE                    4
  3171. #define EMR_POLYBEZIERTO                5
  3172. #define EMR_POLYLINETO                  6
  3173. #define EMR_POLYPOLYLINE                7
  3174. #define EMR_POLYPOLYGON                 8
  3175. #define EMR_SETWINDOWEXTEX              9
  3176. #define EMR_SETWINDOWORGEX              10
  3177. #define EMR_SETVIEWPORTEXTEX            11
  3178. #define EMR_SETVIEWPORTORGEX            12
  3179. #define EMR_SETBRUSHORGEX               13
  3180. #define EMR_EOF                         14
  3181. #define EMR_SETPIXELV                   15
  3182. #define EMR_SETMAPPERFLAGS              16
  3183. #define EMR_SETMAPMODE                  17
  3184. #define EMR_SETBKMODE                   18
  3185. #define EMR_SETPOLYFILLMODE             19
  3186. #define EMR_SETROP2                     20
  3187. #define EMR_SETSTRETCHBLTMODE           21
  3188. #define EMR_SETTEXTALIGN                22
  3189. #define EMR_SETCOLORADJUSTMENT          23
  3190. #define EMR_SETTEXTCOLOR                24
  3191. #define EMR_SETBKCOLOR                  25
  3192. #define EMR_OFFSETCLIPRGN               26
  3193. #define EMR_MOVETOEX                    27
  3194. #define EMR_SETMETARGN                  28
  3195. #define EMR_EXCLUDECLIPRECT             29
  3196. #define EMR_INTERSECTCLIPRECT           30
  3197. #define EMR_SCALEVIEWPORTEXTEX          31
  3198. #define EMR_SCALEWINDOWEXTEX            32
  3199. #define EMR_SAVEDC                      33
  3200. #define EMR_RESTOREDC                   34
  3201. #define EMR_SETWORLDTRANSFORM           35
  3202. #define EMR_MODIFYWORLDTRANSFORM        36
  3203. #define EMR_SELECTOBJECT                37
  3204. #define EMR_CREATEPEN                   38
  3205. #define EMR_CREATEBRUSHINDIRECT         39
  3206. #define EMR_DELETEOBJECT                40
  3207. #define EMR_ANGLEARC                    41
  3208. #define EMR_ELLIPSE                     42
  3209. #define EMR_RECTANGLE                   43
  3210. #define EMR_ROUNDRECT                   44
  3211. #define EMR_ARC                         45
  3212. #define EMR_CHORD                       46
  3213. #define EMR_PIE                         47
  3214. #define EMR_SELECTPALETTE               48
  3215. #define EMR_CREATEPALETTE               49
  3216. #define EMR_SETPALETTEENTRIES           50
  3217. #define EMR_RESIZEPALETTE               51
  3218. #define EMR_REALIZEPALETTE              52
  3219. #define EMR_EXTFLOODFILL                53
  3220. #define EMR_LINETO                      54
  3221. #define EMR_ARCTO                       55
  3222. #define EMR_POLYDRAW                    56
  3223. #define EMR_SETARCDIRECTION             57
  3224. #define EMR_SETMITERLIMIT               58
  3225. #define EMR_BEGINPATH                   59
  3226. #define EMR_ENDPATH                     60
  3227. #define EMR_CLOSEFIGURE                 61
  3228. #define EMR_FILLPATH                    62
  3229. #define EMR_STROKEANDFILLPATH           63
  3230. #define EMR_STROKEPATH                  64
  3231. #define EMR_FLATTENPATH                 65
  3232. #define EMR_WIDENPATH                   66
  3233. #define EMR_SELECTCLIPPATH              67
  3234. #define EMR_ABORTPATH                   68
  3235.  
  3236. #define EMR_GDICOMMENT                  70
  3237. #define EMR_FILLRGN                     71
  3238. #define EMR_FRAMERGN                    72
  3239. #define EMR_INVERTRGN                   73
  3240. #define EMR_PAINTRGN                    74
  3241. #define EMR_EXTSELECTCLIPRGN            75
  3242. #define EMR_BITBLT                      76
  3243. #define EMR_STRETCHBLT                  77
  3244. #define EMR_MASKBLT                     78
  3245. #define EMR_PLGBLT                      79
  3246. #define EMR_SETDIBITSTODEVICE           80
  3247. #define EMR_STRETCHDIBITS               81
  3248. #define EMR_EXTCREATEFONTINDIRECTW      82
  3249. #define EMR_EXTTEXTOUTA                 83
  3250. #define EMR_EXTTEXTOUTW                 84
  3251. #define EMR_POLYBEZIER16                85
  3252. #define EMR_POLYGON16                   86
  3253. #define EMR_POLYLINE16                  87
  3254. #define EMR_POLYBEZIERTO16              88
  3255. #define EMR_POLYLINETO16                89
  3256. #define EMR_POLYPOLYLINE16              90
  3257. #define EMR_POLYPOLYGON16               91
  3258. #define EMR_POLYDRAW16                  92
  3259. #define EMR_CREATEMONOBRUSH             93
  3260. #define EMR_CREATEDIBPATTERNBRUSHPT     94
  3261. #define EMR_EXTCREATEPEN                95
  3262. #define EMR_POLYTEXTOUTA                96
  3263. #define EMR_POLYTEXTOUTW                97
  3264. #if(WINVER >= 0x0400)
  3265. #define EMR_SETICMMODE                  98
  3266. #define EMR_CREATECOLORSPACE            99
  3267. #define EMR_SETCOLORSPACE              100
  3268. #define EMR_DELETECOLORSPACE           101
  3269. #define EMR_GLSRECORD                  102
  3270. #define EMR_GLSBOUNDEDRECORD           103
  3271. #define EMR_PIXELFORMAT                104
  3272. #endif /* WINVER >= 0x0400 */
  3273.  
  3274. #define EMR_MIN                         1
  3275.  
  3276. #if (WINVER >= 0x0400)
  3277. #define EMR_MAX                        104
  3278. #else
  3279. #define EMR_MAX                         97
  3280. #endif
  3281.  
  3282. // Base record type for the enhanced metafile.
  3283.  
  3284. typedef struct tagEMR
  3285. {
  3286.     DWORD   iType;              // Enhanced metafile record type
  3287.     DWORD   nSize;              // Length of the record in bytes.
  3288.                                 // This must be a multiple of 4.
  3289. } EMR, *PEMR;
  3290.  
  3291. // Base text record type for the enhanced metafile.
  3292.  
  3293. typedef struct tagEMRTEXT
  3294. {
  3295.     POINTL  ptlReference;
  3296.     DWORD   nChars;
  3297.     DWORD   offString;          // Offset to the string
  3298.     DWORD   fOptions;
  3299.     RECTL   rcl;
  3300.     DWORD   offDx;              // Offset to the inter-character spacing array.
  3301.                                 // This is always given.
  3302. } EMRTEXT, *PEMRTEXT;
  3303.  
  3304. // Record structures for the enhanced metafile.
  3305.  
  3306. typedef struct tagABORTPATH
  3307. {
  3308.     EMR     emr;
  3309. } EMRABORTPATH,      *PEMRABORTPATH,
  3310.   EMRBEGINPATH,      *PEMRBEGINPATH,
  3311.   EMRENDPATH,        *PEMRENDPATH,
  3312.   EMRCLOSEFIGURE,    *PEMRCLOSEFIGURE,
  3313.   EMRFLATTENPATH,    *PEMRFLATTENPATH,
  3314.   EMRWIDENPATH,      *PEMRWIDENPATH,
  3315.   EMRSETMETARGN,     *PEMRSETMETARGN,
  3316.   EMRSAVEDC,         *PEMRSAVEDC,
  3317.   EMRREALIZEPALETTE, *PEMRREALIZEPALETTE;
  3318.  
  3319. typedef struct tagEMRSELECTCLIPPATH
  3320. {
  3321.     EMR     emr;
  3322.     DWORD   iMode;
  3323. } EMRSELECTCLIPPATH,    *PEMRSELECTCLIPPATH,
  3324.   EMRSETBKMODE,         *PEMRSETBKMODE,
  3325.   EMRSETMAPMODE,        *PEMRSETMAPMODE,
  3326.   EMRSETPOLYFILLMODE,   *PEMRSETPOLYFILLMODE,
  3327.   EMRSETROP2,           *PEMRSETROP2,
  3328.   EMRSETSTRETCHBLTMODE, *PEMRSETSTRETCHBLTMODE,
  3329.   EMRSETICMMODE,        *PEMRSETICMMODE,
  3330.   EMRSETTEXTALIGN,      *PEMRSETTEXTALIGN;
  3331.  
  3332. typedef struct tagEMRSETMITERLIMIT
  3333. {
  3334.     EMR     emr;
  3335.     FLOAT   eMiterLimit;
  3336. } EMRSETMITERLIMIT, *PEMRSETMITERLIMIT;
  3337.  
  3338. typedef struct tagEMRRESTOREDC
  3339. {
  3340.     EMR     emr;
  3341.     LONG    iRelative;          // Specifies a relative instance
  3342. } EMRRESTOREDC, *PEMRRESTOREDC;
  3343.  
  3344. typedef struct tagEMRSETARCDIRECTION
  3345. {
  3346.     EMR     emr;
  3347.     DWORD   iArcDirection;      // Specifies the arc direction in the
  3348.                                 // advanced graphics mode.
  3349. } EMRSETARCDIRECTION, *PEMRSETARCDIRECTION;
  3350.  
  3351. typedef struct tagEMRSETMAPPERFLAGS
  3352. {
  3353.     EMR     emr;
  3354.     DWORD   dwFlags;
  3355. } EMRSETMAPPERFLAGS, *PEMRSETMAPPERFLAGS;
  3356.  
  3357. typedef struct tagEMRSETTEXTCOLOR
  3358. {
  3359.     EMR     emr;
  3360.     COLORREF crColor;
  3361. } EMRSETBKCOLOR,   *PEMRSETBKCOLOR,
  3362.   EMRSETTEXTCOLOR, *PEMRSETTEXTCOLOR;
  3363.  
  3364. typedef struct tagEMRSELECTOBJECT
  3365. {
  3366.     EMR     emr;
  3367.     DWORD   ihObject;           // Object handle index
  3368. } EMRSELECTOBJECT, *PEMRSELECTOBJECT,
  3369.   EMRDELETEOBJECT, *PEMRDELETEOBJECT;
  3370.  
  3371. #if(WINVER >= 0x0400)
  3372. typedef struct tagEMRSELECTCOLORSPACE
  3373. {
  3374.     EMR     emr;
  3375.     DWORD   ihCS;               // ColorSpace handle index
  3376. } EMRSELECTCOLORSPACE, *PEMRSELECTCOLORSPACE,
  3377.   EMRDELETECOLORSPACE, *PEMRDELETECOLORSPACE;
  3378. #endif /* WINVER >= 0x0400 */
  3379.  
  3380. typedef struct tagEMRSELECTPALETTE
  3381. {
  3382.     EMR     emr;
  3383.     DWORD   ihPal;              // Palette handle index, background mode only
  3384. } EMRSELECTPALETTE, *PEMRSELECTPALETTE;
  3385.  
  3386. typedef struct tagEMRRESIZEPALETTE
  3387. {
  3388.     EMR     emr;
  3389.     DWORD   ihPal;              // Palette handle index
  3390.     DWORD   cEntries;
  3391. } EMRRESIZEPALETTE, *PEMRRESIZEPALETTE;
  3392.  
  3393. typedef struct tagEMRSETPALETTEENTRIES
  3394. {
  3395.     EMR     emr;
  3396.     DWORD   ihPal;              // Palette handle index
  3397.     DWORD   iStart;
  3398.     DWORD   cEntries;
  3399.     PALETTEENTRY aPalEntries[1];// The peFlags fields do not contain any flags
  3400. } EMRSETPALETTEENTRIES, *PEMRSETPALETTEENTRIES;
  3401.  
  3402. typedef struct tagEMRSETCOLORADJUSTMENT
  3403. {
  3404.     EMR     emr;
  3405.     COLORADJUSTMENT ColorAdjustment;
  3406. } EMRSETCOLORADJUSTMENT, *PEMRSETCOLORADJUSTMENT;
  3407.  
  3408. typedef struct tagEMRGDICOMMENT
  3409. {
  3410.     EMR     emr;
  3411.     DWORD   cbData;             // Size of data in bytes
  3412.     BYTE    Data[1];
  3413. } EMRGDICOMMENT, *PEMRGDICOMMENT;
  3414.  
  3415. typedef struct tagEMREOF
  3416. {
  3417.     EMR     emr;
  3418.     DWORD   nPalEntries;        // Number of palette entries
  3419.     DWORD   offPalEntries;      // Offset to the palette entries
  3420.     DWORD   nSizeLast;          // Same as nSize and must be the last DWORD
  3421.                                 // of the record.  The palette entries,
  3422.                                 // if exist, precede this field.
  3423. } EMREOF, *PEMREOF;
  3424.  
  3425. typedef struct tagEMRLINETO
  3426. {
  3427.     EMR     emr;
  3428.     POINTL  ptl;
  3429. } EMRLINETO,   *PEMRLINETO,
  3430.   EMRMOVETOEX, *PEMRMOVETOEX;
  3431.  
  3432. typedef struct tagEMROFFSETCLIPRGN
  3433. {
  3434.     EMR     emr;
  3435.     POINTL  ptlOffset;
  3436. } EMROFFSETCLIPRGN, *PEMROFFSETCLIPRGN;
  3437.  
  3438. typedef struct tagEMRFILLPATH
  3439. {
  3440.     EMR     emr;
  3441.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3442. } EMRFILLPATH,          *PEMRFILLPATH,
  3443.   EMRSTROKEANDFILLPATH, *PEMRSTROKEANDFILLPATH,
  3444.   EMRSTROKEPATH,        *PEMRSTROKEPATH;
  3445.  
  3446. typedef struct tagEMREXCLUDECLIPRECT
  3447. {
  3448.     EMR     emr;
  3449.     RECTL   rclClip;
  3450. } EMREXCLUDECLIPRECT,   *PEMREXCLUDECLIPRECT,
  3451.   EMRINTERSECTCLIPRECT, *PEMRINTERSECTCLIPRECT;
  3452.  
  3453. typedef struct tagEMRSETVIEWPORTORGEX
  3454. {
  3455.     EMR     emr;
  3456.     POINTL  ptlOrigin;
  3457. } EMRSETVIEWPORTORGEX, *PEMRSETVIEWPORTORGEX,
  3458.   EMRSETWINDOWORGEX,   *PEMRSETWINDOWORGEX,
  3459.   EMRSETBRUSHORGEX,    *PEMRSETBRUSHORGEX;
  3460.  
  3461. typedef struct tagEMRSETVIEWPORTEXTEX
  3462. {
  3463.     EMR     emr;
  3464.     SIZEL   szlExtent;
  3465. } EMRSETVIEWPORTEXTEX, *PEMRSETVIEWPORTEXTEX,
  3466.   EMRSETWINDOWEXTEX,   *PEMRSETWINDOWEXTEX;
  3467.  
  3468. typedef struct tagEMRSCALEVIEWPORTEXTEX
  3469. {
  3470.     EMR     emr;
  3471.     LONG    xNum;
  3472.     LONG    xDenom;
  3473.     LONG    yNum;
  3474.     LONG    yDenom;
  3475. } EMRSCALEVIEWPORTEXTEX, *PEMRSCALEVIEWPORTEXTEX,
  3476.   EMRSCALEWINDOWEXTEX,   *PEMRSCALEWINDOWEXTEX;
  3477.  
  3478. typedef struct tagEMRSETWORLDTRANSFORM
  3479. {
  3480.     EMR     emr;
  3481.     XFORM   xform;
  3482. } EMRSETWORLDTRANSFORM, *PEMRSETWORLDTRANSFORM;
  3483.  
  3484. typedef struct tagEMRMODIFYWORLDTRANSFORM
  3485. {
  3486.     EMR     emr;
  3487.     XFORM   xform;
  3488.     DWORD   iMode;
  3489. } EMRMODIFYWORLDTRANSFORM, *PEMRMODIFYWORLDTRANSFORM;
  3490.  
  3491. typedef struct tagEMRSETPIXELV
  3492. {
  3493.     EMR     emr;
  3494.     POINTL  ptlPixel;
  3495.     COLORREF crColor;
  3496. } EMRSETPIXELV, *PEMRSETPIXELV;
  3497.  
  3498. typedef struct tagEMREXTFLOODFILL
  3499. {
  3500.     EMR     emr;
  3501.     POINTL  ptlStart;
  3502.     COLORREF crColor;
  3503.     DWORD   iMode;
  3504. } EMREXTFLOODFILL, *PEMREXTFLOODFILL;
  3505.  
  3506. typedef struct tagEMRELLIPSE
  3507. {
  3508.     EMR     emr;
  3509.     RECTL   rclBox;             // Inclusive-inclusive bounding rectangle
  3510. } EMRELLIPSE,  *PEMRELLIPSE,
  3511.   EMRRECTANGLE, *PEMRRECTANGLE;
  3512.  
  3513. typedef struct tagEMRROUNDRECT
  3514. {
  3515.     EMR     emr;
  3516.     RECTL   rclBox;             // Inclusive-inclusive bounding rectangle
  3517.     SIZEL   szlCorner;
  3518. } EMRROUNDRECT, *PEMRROUNDRECT;
  3519.  
  3520. typedef struct tagEMRARC
  3521. {
  3522.     EMR     emr;
  3523.     RECTL   rclBox;             // Inclusive-inclusive bounding rectangle
  3524.     POINTL  ptlStart;
  3525.     POINTL  ptlEnd;
  3526. } EMRARC,   *PEMRARC,
  3527.   EMRARCTO, *PEMRARCTO,
  3528.   EMRCHORD, *PEMRCHORD,
  3529.   EMRPIE,   *PEMRPIE;
  3530.  
  3531. typedef struct tagEMRANGLEARC
  3532. {
  3533.     EMR     emr;
  3534.     POINTL  ptlCenter;
  3535.     DWORD   nRadius;
  3536.     FLOAT   eStartAngle;
  3537.     FLOAT   eSweepAngle;
  3538. } EMRANGLEARC, *PEMRANGLEARC;
  3539.  
  3540. typedef struct tagEMRPOLYLINE
  3541. {
  3542.     EMR     emr;
  3543.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3544.     DWORD   cptl;
  3545.     POINTL  aptl[1];
  3546. } EMRPOLYLINE,     *PEMRPOLYLINE,
  3547.   EMRPOLYBEZIER,   *PEMRPOLYBEZIER,
  3548.   EMRPOLYGON,      *PEMRPOLYGON,
  3549.   EMRPOLYBEZIERTO, *PEMRPOLYBEZIERTO,
  3550.   EMRPOLYLINETO,   *PEMRPOLYLINETO;
  3551.  
  3552. typedef struct tagEMRPOLYLINE16
  3553. {
  3554.     EMR     emr;
  3555.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3556.     DWORD   cpts;
  3557.     POINTS  apts[1];
  3558. } EMRPOLYLINE16,     *PEMRPOLYLINE16,
  3559.   EMRPOLYBEZIER16,   *PEMRPOLYBEZIER16,
  3560.   EMRPOLYGON16,      *PEMRPOLYGON16,
  3561.   EMRPOLYBEZIERTO16, *PEMRPOLYBEZIERTO16,
  3562.   EMRPOLYLINETO16,   *PEMRPOLYLINETO16;
  3563.  
  3564. typedef struct tagEMRPOLYDRAW
  3565. {
  3566.     EMR     emr;
  3567.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3568.     DWORD   cptl;               // Number of points
  3569.     POINTL  aptl[1];            // Array of points
  3570.     BYTE    abTypes[1];         // Array of point types
  3571. } EMRPOLYDRAW, *PEMRPOLYDRAW;
  3572.  
  3573. typedef struct tagEMRPOLYDRAW16
  3574. {
  3575.     EMR     emr;
  3576.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3577.     DWORD   cpts;               // Number of points
  3578.     POINTS  apts[1];            // Array of points
  3579.     BYTE    abTypes[1];         // Array of point types
  3580. } EMRPOLYDRAW16, *PEMRPOLYDRAW16;
  3581.  
  3582. typedef struct tagEMRPOLYPOLYLINE
  3583. {
  3584.     EMR     emr;
  3585.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3586.     DWORD   nPolys;             // Number of polys
  3587.     DWORD   cptl;               // Total number of points in all polys
  3588.     DWORD   aPolyCounts[1];     // Array of point counts for each poly
  3589.     POINTL  aptl[1];            // Array of points
  3590. } EMRPOLYPOLYLINE, *PEMRPOLYPOLYLINE,
  3591.   EMRPOLYPOLYGON,  *PEMRPOLYPOLYGON;
  3592.  
  3593. typedef struct tagEMRPOLYPOLYLINE16
  3594. {
  3595.     EMR     emr;
  3596.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3597.     DWORD   nPolys;             // Number of polys
  3598.     DWORD   cpts;               // Total number of points in all polys
  3599.     DWORD   aPolyCounts[1];     // Array of point counts for each poly
  3600.     POINTS  apts[1];            // Array of points
  3601. } EMRPOLYPOLYLINE16, *PEMRPOLYPOLYLINE16,
  3602.   EMRPOLYPOLYGON16,  *PEMRPOLYPOLYGON16;
  3603.  
  3604. typedef struct tagEMRINVERTRGN
  3605. {
  3606.     EMR     emr;
  3607.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3608.     DWORD   cbRgnData;          // Size of region data in bytes
  3609.     BYTE    RgnData[1];
  3610. } EMRINVERTRGN, *PEMRINVERTRGN,
  3611.   EMRPAINTRGN,  *PEMRPAINTRGN;
  3612.  
  3613. typedef struct tagEMRFILLRGN
  3614. {
  3615.     EMR     emr;
  3616.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3617.     DWORD   cbRgnData;          // Size of region data in bytes
  3618.     DWORD   ihBrush;            // Brush handle index
  3619.     BYTE    RgnData[1];
  3620. } EMRFILLRGN, *PEMRFILLRGN;
  3621.  
  3622. typedef struct tagEMRFRAMERGN
  3623. {
  3624.     EMR     emr;
  3625.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3626.     DWORD   cbRgnData;          // Size of region data in bytes
  3627.     DWORD   ihBrush;            // Brush handle index
  3628.     SIZEL   szlStroke;
  3629.     BYTE    RgnData[1];
  3630. } EMRFRAMERGN, *PEMRFRAMERGN;
  3631.  
  3632. typedef struct tagEMREXTSELECTCLIPRGN
  3633. {
  3634.     EMR     emr;
  3635.     DWORD   cbRgnData;          // Size of region data in bytes
  3636.     DWORD   iMode;
  3637.     BYTE    RgnData[1];
  3638. } EMREXTSELECTCLIPRGN, *PEMREXTSELECTCLIPRGN;
  3639.  
  3640. typedef struct tagEMREXTTEXTOUTA
  3641. {
  3642.     EMR     emr;
  3643.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3644.     DWORD   iGraphicsMode;      // Current graphics mode
  3645.     FLOAT   exScale;            // X and Y scales from Page units to .01mm units
  3646.     FLOAT   eyScale;            //   if graphics mode is GM_COMPATIBLE.
  3647.     EMRTEXT emrtext;            // This is followed by the string and spacing
  3648.                                 // array
  3649. } EMREXTTEXTOUTA, *PEMREXTTEXTOUTA,
  3650.   EMREXTTEXTOUTW, *PEMREXTTEXTOUTW;
  3651.  
  3652. typedef struct tagEMRPOLYTEXTOUTA
  3653. {
  3654.     EMR     emr;
  3655.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3656.     DWORD   iGraphicsMode;      // Current graphics mode
  3657.     FLOAT   exScale;            // X and Y scales from Page units to .01mm units
  3658.     FLOAT   eyScale;            //   if graphics mode is GM_COMPATIBLE.
  3659.     LONG    cStrings;
  3660.     EMRTEXT aemrtext[1];        // Array of EMRTEXT structures.  This is
  3661.                                 // followed by the strings and spacing arrays.
  3662. } EMRPOLYTEXTOUTA, *PEMRPOLYTEXTOUTA,
  3663.   EMRPOLYTEXTOUTW, *PEMRPOLYTEXTOUTW;
  3664.  
  3665. typedef struct tagEMRBITBLT
  3666. {
  3667.     EMR     emr;
  3668.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3669.     LONG    xDest;
  3670.     LONG    yDest;
  3671.     LONG    cxDest;
  3672.     LONG    cyDest;
  3673.     DWORD   dwRop;
  3674.     LONG    xSrc;
  3675.     LONG    ySrc;
  3676.     XFORM   xformSrc;           // Source DC transform
  3677.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  3678.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  3679.                                 // (DIB_RGB_COLORS)
  3680.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  3681.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  3682.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  3683.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  3684. } EMRBITBLT, *PEMRBITBLT;
  3685.  
  3686. typedef struct tagEMRSTRETCHBLT
  3687. {
  3688.     EMR     emr;
  3689.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3690.     LONG    xDest;
  3691.     LONG    yDest;
  3692.     LONG    cxDest;
  3693.     LONG    cyDest;
  3694.     DWORD   dwRop;
  3695.     LONG    xSrc;
  3696.     LONG    ySrc;
  3697.     XFORM   xformSrc;           // Source DC transform
  3698.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  3699.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  3700.                                 // (DIB_RGB_COLORS)
  3701.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  3702.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  3703.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  3704.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  3705.     LONG    cxSrc;
  3706.     LONG    cySrc;
  3707. } EMRSTRETCHBLT, *PEMRSTRETCHBLT;
  3708.  
  3709. typedef struct tagEMRMASKBLT
  3710. {
  3711.     EMR     emr;
  3712.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3713.     LONG    xDest;
  3714.     LONG    yDest;
  3715.     LONG    cxDest;
  3716.     LONG    cyDest;
  3717.     DWORD   dwRop;
  3718.     LONG    xSrc;
  3719.     LONG    ySrc;
  3720.     XFORM   xformSrc;           // Source DC transform
  3721.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  3722.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  3723.                                 // (DIB_RGB_COLORS)
  3724.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  3725.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  3726.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  3727.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  3728.     LONG    xMask;
  3729.     LONG    yMask;
  3730.     DWORD   iUsageMask;         // Mask bitmap info color table usage
  3731.     DWORD   offBmiMask;         // Offset to the mask BITMAPINFO structure if any
  3732.     DWORD   cbBmiMask;          // Size of the mask BITMAPINFO structure if any
  3733.     DWORD   offBitsMask;        // Offset to the mask bitmap bits if any
  3734.     DWORD   cbBitsMask;         // Size of the mask bitmap bits if any
  3735. } EMRMASKBLT, *PEMRMASKBLT;
  3736.  
  3737. typedef struct tagEMRPLGBLT
  3738. {
  3739.     EMR     emr;
  3740.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3741.     POINTL  aptlDest[3];
  3742.     LONG    xSrc;
  3743.     LONG    ySrc;
  3744.     LONG    cxSrc;
  3745.     LONG    cySrc;
  3746.     XFORM   xformSrc;           // Source DC transform
  3747.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  3748.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  3749.                                 // (DIB_RGB_COLORS)
  3750.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  3751.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  3752.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  3753.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  3754.     LONG    xMask;
  3755.     LONG    yMask;
  3756.     DWORD   iUsageMask;         // Mask bitmap info color table usage
  3757.     DWORD   offBmiMask;         // Offset to the mask BITMAPINFO structure if any
  3758.     DWORD   cbBmiMask;          // Size of the mask BITMAPINFO structure if any
  3759.     DWORD   offBitsMask;        // Offset to the mask bitmap bits if any
  3760.     DWORD   cbBitsMask;         // Size of the mask bitmap bits if any
  3761. } EMRPLGBLT, *PEMRPLGBLT;
  3762.  
  3763. typedef struct tagEMRSETDIBITSTODEVICE
  3764. {
  3765.     EMR     emr;
  3766.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3767.     LONG    xDest;
  3768.     LONG    yDest;
  3769.     LONG    xSrc;
  3770.     LONG    ySrc;
  3771.     LONG    cxSrc;
  3772.     LONG    cySrc;
  3773.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  3774.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  3775.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  3776.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  3777.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  3778.     DWORD   iStartScan;
  3779.     DWORD   cScans;
  3780. } EMRSETDIBITSTODEVICE, *PEMRSETDIBITSTODEVICE;
  3781.  
  3782. typedef struct tagEMRSTRETCHDIBITS
  3783. {
  3784.     EMR     emr;
  3785.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3786.     LONG    xDest;
  3787.     LONG    yDest;
  3788.     LONG    xSrc;
  3789.     LONG    ySrc;
  3790.     LONG    cxSrc;
  3791.     LONG    cySrc;
  3792.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  3793.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  3794.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  3795.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  3796.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  3797.     DWORD   dwRop;
  3798.     LONG    cxDest;
  3799.     LONG    cyDest;
  3800. } EMRSTRETCHDIBITS, *PEMRSTRETCHDIBITS;
  3801.  
  3802. typedef struct tagEMREXTCREATEFONTINDIRECTW
  3803. {
  3804.     EMR     emr;
  3805.     DWORD   ihFont;             // Font handle index
  3806.     EXTLOGFONTW elfw;
  3807. } EMREXTCREATEFONTINDIRECTW, *PEMREXTCREATEFONTINDIRECTW;
  3808.  
  3809. typedef struct tagEMRCREATEPALETTE
  3810. {
  3811.     EMR     emr;
  3812.     DWORD   ihPal;              // Palette handle index
  3813.     LOGPALETTE lgpl;            // The peFlags fields in the palette entries
  3814.                                 // do not contain any flags
  3815. } EMRCREATEPALETTE, *PEMRCREATEPALETTE;
  3816.  
  3817. #if(WINVER >= 0x0400)
  3818.  
  3819. typedef struct tagEMRCREATECOLORSPACE
  3820. {
  3821.     EMR             emr;
  3822.     DWORD           ihCS;       // ColorSpace handle index
  3823.     LOGCOLORSPACEW  lcs;
  3824. } EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE;
  3825.  
  3826. #endif /* WINVER >= 0x0400 */
  3827.  
  3828. typedef struct tagEMRCREATEPEN
  3829. {
  3830.     EMR     emr;
  3831.     DWORD   ihPen;              // Pen handle index
  3832.     LOGPEN  lopn;
  3833. } EMRCREATEPEN, *PEMRCREATEPEN;
  3834.  
  3835. typedef struct tagEMREXTCREATEPEN
  3836. {
  3837.     EMR     emr;
  3838.     DWORD   ihPen;              // Pen handle index
  3839.     DWORD   offBmi;             // Offset to the BITMAPINFO structure if any
  3840.     DWORD   cbBmi;              // Size of the BITMAPINFO structure if any
  3841.                                 // The bitmap info is followed by the bitmap
  3842.                                 // bits to form a packed DIB.
  3843.     DWORD   offBits;            // Offset to the brush bitmap bits if any
  3844.     DWORD   cbBits;             // Size of the brush bitmap bits if any
  3845.     EXTLOGPEN elp;              // The extended pen with the style array.
  3846. } EMREXTCREATEPEN, *PEMREXTCREATEPEN;
  3847.  
  3848. typedef struct tagEMRCREATEBRUSHINDIRECT
  3849. {
  3850.     EMR     emr;
  3851.     DWORD   ihBrush;            // Brush handle index
  3852.     LOGBRUSH lb;                // The style must be BS_SOLID, BS_HOLLOW,
  3853.                                 // BS_NULL or BS_HATCHED.
  3854. } EMRCREATEBRUSHINDIRECT, *PEMRCREATEBRUSHINDIRECT;
  3855.  
  3856. typedef struct tagEMRCREATEMONOBRUSH
  3857. {
  3858.     EMR     emr;
  3859.     DWORD   ihBrush;            // Brush handle index
  3860.     DWORD   iUsage;             // Bitmap info color table usage
  3861.     DWORD   offBmi;             // Offset to the BITMAPINFO structure
  3862.     DWORD   cbBmi;              // Size of the BITMAPINFO structure
  3863.     DWORD   offBits;            // Offset to the bitmap bits
  3864.     DWORD   cbBits;             // Size of the bitmap bits
  3865. } EMRCREATEMONOBRUSH, *PEMRCREATEMONOBRUSH;
  3866.  
  3867. typedef struct tagEMRCREATEDIBPATTERNBRUSHPT
  3868. {
  3869.     EMR     emr;
  3870.     DWORD   ihBrush;            // Brush handle index
  3871.     DWORD   iUsage;             // Bitmap info color table usage
  3872.     DWORD   offBmi;             // Offset to the BITMAPINFO structure
  3873.     DWORD   cbBmi;              // Size of the BITMAPINFO structure
  3874.                                 // The bitmap info is followed by the bitmap
  3875.                                 // bits to form a packed DIB.
  3876.     DWORD   offBits;            // Offset to the bitmap bits
  3877.     DWORD   cbBits;             // Size of the bitmap bits
  3878. } EMRCREATEDIBPATTERNBRUSHPT, *PEMRCREATEDIBPATTERNBRUSHPT;
  3879.  
  3880. typedef struct tagEMRFORMAT
  3881. {
  3882.     DWORD   dSignature;         // Format signature, e.g. ENHMETA_SIGNATURE.
  3883.     DWORD   nVersion;           // Format version number.
  3884.     DWORD   cbData;             // Size of data in bytes.
  3885.     DWORD   offData;            // Offset to data from GDICOMMENT_IDENTIFIER.
  3886.                                 // It must begin at a DWORD offset.
  3887. } EMRFORMAT, *PEMRFORMAT;
  3888.  
  3889. typedef struct tagEMRGLSRECORD
  3890. {
  3891.     EMR     emr;
  3892.     DWORD   cbData;             // Size of data in bytes
  3893.     BYTE    Data[1];
  3894. } EMRGLSRECORD, *PEMRGLSRECORD;
  3895.  
  3896. typedef struct tagEMRGLSBOUNDEDRECORD
  3897. {
  3898.     EMR     emr;
  3899.     RECTL   rclBounds;          // Bounds in recording coordinates
  3900.     DWORD   cbData;             // Size of data in bytes
  3901.     BYTE    Data[1];
  3902. } EMRGLSBOUNDEDRECORD, *PEMRGLSBOUNDEDRECORD;
  3903.  
  3904. typedef struct tagEMRPIXELFORMAT
  3905. {
  3906.     EMR     emr;
  3907.     PIXELFORMATDESCRIPTOR pfd;
  3908. } EMRPIXELFORMAT, *PEMRPIXELFORMAT;
  3909.  
  3910. #define GDICOMMENT_IDENTIFIER           0x43494447
  3911. #define GDICOMMENT_WINDOWS_METAFILE     0x80000001
  3912. #define GDICOMMENT_BEGINGROUP           0x00000002
  3913. #define GDICOMMENT_ENDGROUP             0x00000003
  3914. #define GDICOMMENT_MULTIFORMATS         0x40000004
  3915. #define EPS_SIGNATURE                   0x46535045
  3916.  
  3917. #endif  /* NOMETAFILE */
  3918.  
  3919.  
  3920. // OpenGL wgl prototypes
  3921.  
  3922. WINGDIAPI BOOL  WINAPI wglCopyContext(HGLRC, HGLRC, UINT);
  3923. WINGDIAPI HGLRC WINAPI wglCreateContext(HDC);
  3924. WINGDIAPI HGLRC WINAPI wglCreateLayerContext(HDC, int);
  3925. WINGDIAPI BOOL  WINAPI wglDeleteContext(HGLRC);
  3926. WINGDIAPI HGLRC WINAPI wglGetCurrentContext(VOID);
  3927. WINGDIAPI HDC   WINAPI wglGetCurrentDC(VOID);
  3928. WINGDIAPI PROC  WINAPI wglGetProcAddress(LPCSTR);
  3929. WINGDIAPI BOOL  WINAPI wglMakeCurrent(HDC, HGLRC);
  3930. WINGDIAPI BOOL  WINAPI wglShareLists(HGLRC, HGLRC);
  3931. WINGDIAPI BOOL  WINAPI wglUseFontBitmapsA(HDC, DWORD, DWORD, DWORD);
  3932. WINGDIAPI BOOL  WINAPI wglUseFontBitmapsW(HDC, DWORD, DWORD, DWORD);
  3933. #ifdef UNICODE
  3934. #define wglUseFontBitmaps  wglUseFontBitmapsW
  3935. #else
  3936. #define wglUseFontBitmaps  wglUseFontBitmapsA
  3937. #endif // !UNICODE
  3938. WINGDIAPI BOOL  WINAPI SwapBuffers(HDC);
  3939.  
  3940. typedef struct _POINTFLOAT {
  3941.     FLOAT   x;
  3942.     FLOAT   y;
  3943. } POINTFLOAT, *PPOINTFLOAT;
  3944.  
  3945. typedef struct _GLYPHMETRICSFLOAT {
  3946.     FLOAT       gmfBlackBoxX;
  3947.     FLOAT       gmfBlackBoxY;
  3948.     POINTFLOAT  gmfptGlyphOrigin;
  3949.     FLOAT       gmfCellIncX;
  3950.     FLOAT       gmfCellIncY;
  3951. } GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, FAR *LPGLYPHMETRICSFLOAT;
  3952.  
  3953. #define WGL_FONT_LINES      0
  3954. #define WGL_FONT_POLYGONS   1
  3955. WINGDIAPI BOOL  WINAPI wglUseFontOutlinesA(HDC, DWORD, DWORD, DWORD, FLOAT,
  3956.                                            FLOAT, int, LPGLYPHMETRICSFLOAT);
  3957. WINGDIAPI BOOL  WINAPI wglUseFontOutlinesW(HDC, DWORD, DWORD, DWORD, FLOAT,
  3958.                                            FLOAT, int, LPGLYPHMETRICSFLOAT);
  3959. #ifdef UNICODE
  3960. #define wglUseFontOutlines  wglUseFontOutlinesW
  3961. #else
  3962. #define wglUseFontOutlines  wglUseFontOutlinesA
  3963. #endif // !UNICODE
  3964.  
  3965. /* Layer plane descriptor */
  3966. typedef struct tagLAYERPLANEDESCRIPTOR { // lpd
  3967.     WORD  nSize;
  3968.     WORD  nVersion;
  3969.     DWORD dwFlags;
  3970.     BYTE  iPixelType;
  3971.     BYTE  cColorBits;
  3972.     BYTE  cRedBits;
  3973.     BYTE  cRedShift;
  3974.     BYTE  cGreenBits;
  3975.     BYTE  cGreenShift;
  3976.     BYTE  cBlueBits;
  3977.     BYTE  cBlueShift;
  3978.     BYTE  cAlphaBits;
  3979.     BYTE  cAlphaShift;
  3980.     BYTE  cAccumBits;
  3981.     BYTE  cAccumRedBits;
  3982.     BYTE  cAccumGreenBits;
  3983.     BYTE  cAccumBlueBits;
  3984.     BYTE  cAccumAlphaBits;
  3985.     BYTE  cDepthBits;
  3986.     BYTE  cStencilBits;
  3987.     BYTE  cAuxBuffers;
  3988.     BYTE  iLayerPlane;
  3989.     BYTE  bReserved;
  3990.     COLORREF crTransparent;
  3991. } LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, FAR *LPLAYERPLANEDESCRIPTOR;
  3992.  
  3993. /* LAYERPLANEDESCRIPTOR flags */
  3994. #define LPD_DOUBLEBUFFER        0x00000001
  3995. #define LPD_STEREO              0x00000002
  3996. #define LPD_SUPPORT_GDI         0x00000010
  3997. #define LPD_SUPPORT_OPENGL      0x00000020
  3998. #define LPD_SHARE_DEPTH         0x00000040
  3999. #define LPD_SHARE_STENCIL       0x00000080
  4000. #define LPD_SHARE_ACCUM         0x00000100
  4001. #define LPD_SWAP_EXCHANGE       0x00000200
  4002. #define LPD_SWAP_COPY           0x00000400
  4003. #define LPD_TRANSPARENT         0x00001000
  4004.  
  4005. #define LPD_TYPE_RGBA        0
  4006. #define LPD_TYPE_COLORINDEX  1
  4007.  
  4008. /* wglSwapLayerBuffers flags */
  4009. #define WGL_SWAP_MAIN_PLANE     0x00000001
  4010. #define WGL_SWAP_OVERLAY1       0x00000002
  4011. #define WGL_SWAP_OVERLAY2       0x00000004
  4012. #define WGL_SWAP_OVERLAY3       0x00000008
  4013. #define WGL_SWAP_OVERLAY4       0x00000010
  4014. #define WGL_SWAP_OVERLAY5       0x00000020
  4015. #define WGL_SWAP_OVERLAY6       0x00000040
  4016. #define WGL_SWAP_OVERLAY7       0x00000080
  4017. #define WGL_SWAP_OVERLAY8       0x00000100
  4018. #define WGL_SWAP_OVERLAY9       0x00000200
  4019. #define WGL_SWAP_OVERLAY10      0x00000400
  4020. #define WGL_SWAP_OVERLAY11      0x00000800
  4021. #define WGL_SWAP_OVERLAY12      0x00001000
  4022. #define WGL_SWAP_OVERLAY13      0x00002000
  4023. #define WGL_SWAP_OVERLAY14      0x00004000
  4024. #define WGL_SWAP_OVERLAY15      0x00008000
  4025. #define WGL_SWAP_UNDERLAY1      0x00010000
  4026. #define WGL_SWAP_UNDERLAY2      0x00020000
  4027. #define WGL_SWAP_UNDERLAY3      0x00040000
  4028. #define WGL_SWAP_UNDERLAY4      0x00080000
  4029. #define WGL_SWAP_UNDERLAY5      0x00100000
  4030. #define WGL_SWAP_UNDERLAY6      0x00200000
  4031. #define WGL_SWAP_UNDERLAY7      0x00400000
  4032. #define WGL_SWAP_UNDERLAY8      0x00800000
  4033. #define WGL_SWAP_UNDERLAY9      0x01000000
  4034. #define WGL_SWAP_UNDERLAY10     0x02000000
  4035. #define WGL_SWAP_UNDERLAY11     0x04000000
  4036. #define WGL_SWAP_UNDERLAY12     0x08000000
  4037. #define WGL_SWAP_UNDERLAY13     0x10000000
  4038. #define WGL_SWAP_UNDERLAY14     0x20000000
  4039. #define WGL_SWAP_UNDERLAY15     0x40000000
  4040.  
  4041. WINGDIAPI BOOL WINAPI wglDescribeLayerPlane(HDC, int, int, UINT,
  4042.                                             LPLAYERPLANEDESCRIPTOR);
  4043. WINGDIAPI int  WINAPI wglSetLayerPaletteEntries(HDC, int, int, int,
  4044.                                                 CONST COLORREF *);
  4045. WINGDIAPI int  WINAPI wglGetLayerPaletteEntries(HDC, int, int, int,
  4046.                                                 COLORREF *);
  4047. WINGDIAPI BOOL WINAPI wglRealizeLayerPalette(HDC, int, BOOL);
  4048. WINGDIAPI BOOL WINAPI wglSwapLayerBuffers(HDC, UINT);
  4049.  
  4050. #endif /* NOGDI */
  4051.  
  4052. #ifdef __cplusplus
  4053. }
  4054. #endif
  4055.  
  4056. #pragma option pop
  4057. #endif /* _WINGDI_ */
  4058.